{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import warnings\n",
    "warnings.filterwarnings('ignore')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 20 Case Study 5 Solution\n",
    "\n",
    "# 20. 1 Exploring the Data\n",
    "\n",
    "Let's separately explore the _Profiles_, _Observations_ and _Friendships_ tables.\n",
    "\n",
    "### 20.1.1 Examining the Profiles\n",
    "We'll start by loading the _Profiles_ table into Pandas and summarizing the table's contents.\n",
    "\n",
    "**Listing 23. 1. Loading the Profiles table**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The table contains 4039 rows and 6 columns.\n",
      "Table Summary:\n",
      "\n",
      "          Profile_ID           Sex Relationship_Status          Dorm         Major          Year\n",
      "count           4039          4039                3631          4039          4039          4039\n",
      "unique          4039             2                   3            15            30             4\n",
      "top     6e0b386157c4  e807eb960650        ac0b88e46e20  a8e6e404d1b3  141d4cdd5aaf  c1a648750a4b\n",
      "freq               1          2020                1963          2739          1366          1796\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "\n",
    "def summarize_table(df):\n",
    "    n_rows, n_columns = df.shape\n",
    "    summary = df.describe()\n",
    "    print(f\"The table contains {n_rows} rows and {n_columns} columns.\")\n",
    "    print(\"Table Summary:\\n\")\n",
    "    print(summary.to_string())\n",
    "\n",
    "df_profile = pd.read_csv('friendhook/Profiles.csv')\n",
    "summarize_table(df_profile)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "There is one place in the table summary where the numbers are off; the _Relationship Status_ column. Pandas has detected three _Relationship Status_ categories across 3631 of 4039 table rows. The remaining 400 or so rows are null. They don't contain any assigned relationship status. Lets count the total number of empty rows.\n",
    "\n",
    "**Listing 23. 2. Counting empty Relationship Status profiles**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "408 profiles are missing the Relationship Status field.\n"
     ]
    }
   ],
   "source": [
    "is_null = df_profile.Relationship_Status.isnull()\n",
    "num_null = df_profile[is_null].shape[0]\n",
    "print(f\"{num_null} profiles are missing the Relationship Status field.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "408 profiles do not contain a listed relationship status.  We can treat the lack of status as a fourth _unspecified_ relationship status category. Hence, we should assign these rows a category id. What id value should we choose? Before we answer the question, lets examine all unique ids within the _Relationship Status_ column.\n",
    "\n",
    "**Listing 23. 3. Checking unique Relationship Status values**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{nan, 'ac0b88e46e20', '9cea719429e9', '188f9a32c360'}\n"
     ]
    }
   ],
   "source": [
    "unique_ids = set(df_profile.Relationship_Status.values)\n",
    "print(unique_ids)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The Scikit-Learn library is unable to process hash-codes or null values. It can only process numbers. Hence, we'll need to eventually convert the categories to numeric values. \n",
    "\n",
    "**Listing 23. 4. Mapping Relationship Status values to numbers**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "category_map = {'9cea719429e9': 0, np.nan: 1, '188f9a32c360': 2, \n",
    "                'ac0b88e46e20': 3}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we'll replace the contents of the _Relationship Status_ column with the appropriate numeric values.\n",
    "\n",
    "**Listing 23. 5. Updating the Relationship Status column**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0       0\n",
      "1       3\n",
      "2       3\n",
      "3       3\n",
      "4       0\n",
      "       ..\n",
      "4034    3\n",
      "4035    0\n",
      "4036    3\n",
      "4037    3\n",
      "4038    0\n",
      "Name: Relationship_Status, Length: 4039, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "nums = [category_map[hash_code] \n",
    "        for hash_code in df_profile.Relationship_Status.values]\n",
    "df_profile['Relationship_Status'] = nums\n",
    "print(df_profile.Relationship_Status)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We've transformed _Relationship Status_ into a numeric variable. However, the remaining five columns in the table still contain hash-codes. Let's create a category mapping between hash-codes and numbers in each column. We'll track the category mappings in each column with a `col_to_mapping` dictionary. We'll also leverage the mappings in order to replace all hash-codes with numbers in `df_profile`.\n",
    "\n",
    "**Listing 23. 6. Replacing all Profile hash-codes with numeric values**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " Profile_ID  Sex  Relationship_Status  Dorm  Major  Year\n",
      "       2899    0                    0     5     13     2\n",
      "       1125    0                    3    12      6     1\n",
      "       3799    0                    3    12     29     2\n",
      "       3338    0                    3     4     25     0\n",
      "       2007    1                    0    12      2     0\n"
     ]
    }
   ],
   "source": [
    "col_to_mapping = {'Relationship_Status': category_map}\n",
    "\n",
    "for column in df_profile.columns:\n",
    "    if column in col_to_mapping:\n",
    "        continue\n",
    "        \n",
    "    unique_ids = sorted(set(df_profile[column].values))\n",
    "    category_map = {id_: i for i, id_ in enumerate(unique_ids)}\n",
    "    col_to_mapping[column] = category_map\n",
    "    nums = [category_map[hash_code] \n",
    "            for hash_code in df_profile[column].values]\n",
    "    df_profile[column] = nums\n",
    "\n",
    "head = df_profile.head()\n",
    "print(head.to_string(index=False))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We've finished tweaking the `df_profile`. Now lets turn our attention to the table of experimental observations.\n",
    "\n",
    "### 23.1.2 Exploring the Experimental Observations\n",
    "We'll start by loading the _Observations_ table into Pandas and summarizing the table's contents.\n",
    "\n",
    "**Listing 23. 7. Loading the Observations table**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The table contains 4039 rows and 5 columns.\n",
      "Table Summary:\n",
      "\n",
      "          Profile_ID Selected_Friend Selected_Friend_of_Friend Friend_Request_Sent Friend_Request_Accepted\n",
      "count           4039            4039                      4039                4039                    4039\n",
      "unique          4039            2219                      2327                   2                       2\n",
      "top     6e0b386157c4    89581f99fa1e              6caa597f13cc                True                    True\n",
      "freq               1              77                        27                2519                    2460\n"
     ]
    }
   ],
   "source": [
    "df_obs = pd.read_csv('friendhook/Observations.csv')\n",
    "summarize_table(df_obs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The five table columns all consistantly show 4039 filled rows. There are no empty values in the table. This is good. However, the actual column names are hard to read. The names are very descriptive, but also very long. We should shorten some of the names in order to ease our cognitive load. \n",
    "\n",
    "**Listing 23. 8. Renaming the observation columns**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The table contains 4039 rows and 5 columns.\n",
      "Table Summary:\n",
      "\n",
      "          Profile_ID        Friend           FoF  Sent Accepted\n",
      "count           4039          4039          4039  4039     4039\n",
      "unique          4039          2219          2327     2        2\n",
      "top     6e0b386157c4  89581f99fa1e  6caa597f13cc  True     True\n",
      "freq               1            77            27  2519     2460\n"
     ]
    }
   ],
   "source": [
    "new_names = {'Selected_Friend': 'Friend', \n",
    "             'Selected_Friend_of_Friend': 'FoF',\n",
    "             'Friend_Request_Sent': 'Sent',\n",
    "             'Friend_Request_Accepted': 'Accepted'}\n",
    "df_obs = df_obs.rename(columns=new_names)\n",
    "summarize_table(df_obs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Approximately 62% (2519) of the friend suggestions lead to friend request being sent. This is very promising; the friend-of-a-friend suggestions are quite effective. Furthermore, approximately 60% (2460) of sampled instances led to a friend request getting accepted. Hence, the sent friend requests are ignored or rejected just 2% (2519 - 2460 = 50) of the time. Of course, our numbers assume that there are no observations where _Sent_ is False and _Accepted_ is True. This scenario is not possible, because a friend-request cannot be accepted if it has not yet been sent. Still, as sanity check, lets test the integrity of the data by confirm that the scenario does not take place.\n",
    "\n",
    "**Listing 23. 9. Ensuring that Sent is `True` for all accepted requests**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "condition = (df_obs.Sent == False) & (df_obs.Accepted == True)\n",
    "assert not df_obs[condition].shape[0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Based on our observations, user behavior follows three possible scenarios. Hence, we can encode this categorical behavior by assigning numbers `0`, `1`, and `2` to the behavior patterns.\n",
    "\n",
    "**Listing 23. 10. Assigning classes of behavior to the user observations**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "behaviors = []\n",
    "for sent, accepted in df_obs[['Sent', 'Accepted']].values:\n",
    "    behavior = 2 if (sent and not accepted) else int(sent) * int(accepted)\n",
    "    behaviors.append(behavior)\n",
    "df_obs['Behavior'] = behaviors"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Additionally, we must transform the profile ids in the first three columns from hash-codes to numeric ids that are consistent with `df_profile.Profile_ID`. \n",
    "\n",
    "**Listing 23. 11. Replacing all Observation hash-codes with numeric values**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " Profile_ID  Friend   FoF   Sent  Accepted  Behavior\n",
      "       2485    2899  2847  False     False         0\n",
      "       2690    2899  3528  False     False         0\n",
      "       3904    2899  3528  False     False         0\n",
      "        709    2899  3403  False     False         0\n",
      "        502    2899   345   True      True         1\n"
     ]
    }
   ],
   "source": [
    "for col in ['Profile_ID', 'Friend', 'FoF']:\n",
    "    nums = [col_to_mapping['Profile_ID'][hash_code]\n",
    "            for hash_code in df_obs[col]]\n",
    "    df_obs[col] = nums\n",
    "\n",
    "head = df_obs.head()\n",
    "print(head.to_string(index=False))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The `df_obs` now aligns with `df_profile`. Only a single data table remains unanalyzed. Lets proceed to explore the friendship linkages within the remaining _Friendships_ table.\n",
    "\n",
    "\n",
    "### 23.1.2 Exploring Friendships Linkage Table\n",
    "We'll start by loading the _Friendships_ table into Pandas and summarizing the table's contents.\n",
    "\n",
    "**Listing 23. 12. Loading the Friendships table**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The table contains 88234 rows and 2 columns.\n",
      "Table Summary:\n",
      "\n",
      "            Friend_A      Friend_B\n",
      "count          88234         88234\n",
      "unique          3646          4037\n",
      "top     89581f99fa1e  97ba93d9b169\n",
      "freq            1043           251\n"
     ]
    }
   ],
   "source": [
    "df_friends = pd.read_csv('friendhook/Friendships.csv')\n",
    "summarize_table(df_friends)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In order to carry out a more detailed analysis, we should load the frienship data into a NetworkX graph. \n",
    "\n",
    "**Listing 23. 13. Loading the social graph into NetworkX**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The social graph contains 4039 nodes.\n"
     ]
    }
   ],
   "source": [
    "import networkx as nx\n",
    "G = nx.Graph()\n",
    "for id1, id2 in df_friends.values:\n",
    "    node1 = col_to_mapping['Profile_ID'][id1]\n",
    "    node2 = col_to_mapping['Profile_ID'][id2]\n",
    "    G.add_edge(node1, node2)\n",
    "    \n",
    "nodes = list(G.nodes)\n",
    "num_nodes = len(nodes)\n",
    "print(f\"The social graph contains {num_nodes} nodes.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Lets try to gain more insights into the graph structure by visualizing it with `nx.draw`. Please note the graph is rather large, so visulization might take 10-30 seconds to load.\n",
    "\n",
    "**Listing 23. 14. Visualizing the social graph**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "np.random.seed(0)\n",
    "nx.draw(G, node_size=5)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Tightly clustered social groups are clearly visible within the network. Lets extract these groups using Markov clustering. \n",
    "\n",
    "**Listing 23. 15. Finding social groups using Markov clustering**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10 clusters were found in the social graph.\n"
     ]
    }
   ],
   "source": [
    "import markov_clustering as mc\n",
    "matrix = nx.to_scipy_sparse_matrix(G)\n",
    "result = mc.run_mcl(matrix)\n",
    "clusters = mc.get_clusters(result) \n",
    "num_clusters = len(clusters)\n",
    "print(f\"{num_clusters} clusters were found in the social graph.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Ten clusters were found in the social graph. Lets visualize these clusters by coloring each node based on cluster id. To start, we'll need to iterate over `clusters` and assign a `cluster_id` attribute to every node.\n",
    "\n",
    "**Listing 23. 16. Assigning cluster attributes to nodes**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "for cluster_id, node_indices in enumerate(clusters):\n",
    "    for i in node_indices:\n",
    "        node = nodes[i]\n",
    "        G.nodes[node]['cluster_id'] = cluster_id"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we'll color the nodes based on their attribute assignment.\n",
    "\n",
    "**Listing 23. 17. Coloring the nodes by cluster assignment**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAb4AAAEuCAYAAADx63eqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAADc6ElEQVR4nOydd3zU9BvH30lu9a57QVsKLXvvIUsQkCllFBTcAj9xixu34kJE3DJUxMEUEARBZIgosyB7lFm66d63k98fx4UWCm4qNO/Xq6/2crnkm1yaT57n+wxBURQFDQ0NDQ2NaoJY1QPQ0NDQ0NC4nGjCp6GhoaFRrdCET0NDQ0OjWqEJn4aGhoZGtUITPg0NDQ2NaoUmfBoaGhoa1QpN+DQ0NDQ0qhWa8GloaGhoVCs04dPQ0NDQqFZowqehoaGhUa3QhE9DQ0NDo1qhCZ+GhoaGRrVCEz4NDQ0NjWqFJnwaGhoaGtUKTfg0NDQ0NKoVmvBpaGhoaFQrNOHT0NDQ0KhW6Kp6ABoa/zRymR3XwXQUSUDfMhr36RzcyXkIgWYESQKnC129cJBERD9TVQ9XQ0PjMiMoiqJU9SA0NP4qzlPZuI9lAQr6NnUQgy3Y1x8Ct4ICCAYJnG44e5V7L3YBQBSQ6oahb1CjSsauoaFRNWjCp3FFIssy7sIy3NtPnVOzi6AAnL3MvX8LgoAgCCAJGPo0RXDJuLOKEQPNiL7Gf3n0GhoaVYkmfBpXHG6HC+f6w+rr8pewIAgoZ5cJgCKAaDYil9g8Zp4CbkVGJ0qedRUFqaY/SrEdxeYEQcDYoyGCUX/Zj0tDQ+PyoAW3aFxxyMl56t+KolAsugFUIbM57cg6j0VntdlwK/JZIfQsk2WZvOJCzzJBQC60IlsdICu43W4Uu6uqDk1DQ+MyoAmfxhWHGBUIeETP4XJSXN+P9OI8XG4Xvx7YRZ3R16E0j+DHnZtZ8NP37D2wH1H0XOqCIOB2u7nusdvIKcr3WIt2Nz8d3U1aXha/ntyHoAW8aGhc1WhRnRpXHJKPAXo2wn2mkLptG1NaVkpqair1mzfnzJkz6HQ6nn71RZ7scSNdm7fFbDR55vPOYjIYKbVZ2Zl4gH4duqO43Rw9mkjIbY24c+gTJI8aguiSEcP9K3xOQ0Pj6kCz+DSuSCQfA4aYMI4dP4bb7aZ58+Z8+eWX6PV63G433y35llD/ICwmHwAcTqc6FygrCiO696Nbi/YIeKzAm/vE0coRxMyHX8ax4xTOvSm4DmdU4RFqaGj8W2jBLRpXPLt376Zt27Z07NiRmJgYFi1ahCiKbPl0KU1Cotl19AAfr5jPsK59GNbtegAOnT5Bk9p1VRfo+f8GgiAgBJkxXlPvsh+PhobGv4tm8Wlc8bRp04Y5c+awY8cODAYDJpMJRVEIlszoJIlrmrbmo4de4IeETVgdNtxuN6CowTCViZ4C6JtEVsnxaGho/LtowqdxVXDHHXfw0EMP8fXXXzN69GgMOj0RwWGIooggCPiazNjsDiRRQkahUXRd9bPpuVlkFeSqr92yjFQrCDHApyoORUND419GEz6Nq4b33nuPHj168PnnnxMVXYunPnkLtywD4JbdjBs0Er1Oj0GnRzybwG612xj4zP8I8gtQA1mSHfkYWtSqykPR0ND4F9GET+OqYuPGjURFRZGUlMTH383jizXfUmqzYnXY6dysDeJZ92axtRSX28VjM9/kaKpnXUVRsDns1O3VoaoPQ0ND419EC27RuOpwOBwEBgbicrlwOp20rteEtJwzfP/6TGJrRuOW3TQdM5BiaylOV8Vk9bi4OJYvX15FI9fQ0LgcaMKncVWSlpZG7dq1KwSv+PqY6dX6Gn47dpDUnDMXfEYQBL799luGDBlyuYeroaFxGdGET+OqZcOGDfTu3ft31/M3+1JsLUUQBEpKSvDx0YJaNDSuZrQ5Po2rll69ejF16tSLvm82m/nggedIW/gLCR8tplmTpproaWhUAzTh07iqeeyxxxg1ahQAsTVrEVMzCgBRFLn//vu5o99wdJJEnRpR3HvrmKocqoaGxmVCc3VqVAvuGBjPu3dPRAA++m4eby/+HBcyMx58icHX9CSnqAD/61sQEh5W1UPV0ND4l9EsPo1qwSdvvIuP0YTRYOShYbfx89tfERERwZG0UzhcLvzNvgQ4tZrtGhrVAU34NKoFupgQikpLANDr9NSPqkN8h950b+rp3mA2mpDzy6p4lBoaGpcDTfg0qgVigJnIUd2ZtXKh2oD2yZFjiAgOO1ubU0E0aV3XNTSqA5rwaVQbBEHgkRlvkF2Yh81hR1ZkViVsotRmRREExDC/qh6ihobGZUALbtGoNuj1elwuF7XDIxjcuRe/HvyNA6eO0iKmIdt378TgZ67qIWpoaFwGNOHTqDbodLqzLYnOIYoifn5+FBQUVM2gNDQ0Ljuaq1OjWqHX6zEZjESF1FBbFjVs2LCqh6WhoXEZ0YRPo9qgKAq1wmtydM4aDs7+nplPvoYoinTs2LGqh6ahoXEZ0YRPo9qgKArdWrQnwOKHUW8gvksfXC4XAwYMqOqhaWhoXEY04dOoNiiKQoDFD50koSgKLpcLRVHo1atXVQ9NQ0PjMqKVqtCoFihONxOG30F0ZC1sDjs6ScfRtNOYTCatMLWGRjVDi+rUqBY4diVhTctFVhTeXTyHElsZ3/y6BoPFh+PHj1f18DQ0NC4jmsWnUS1QHG70kg67y8GJjBTmrv8OQRC46aabqnpoGhoalxlN+DSqBWLTCFa/N4fMghwWblwFeOb8Bg4cWMUj09DQuNxork6NakFeXh4hISHo9XqcTmeF5UFBQVU4Mg0NjcuNFtWpUS3Iy8sDwM/vXD1OSZI00dPQqIZowqdRLcjPzwfA399fXRYYGFhFo9HQ0KhKNOHTqBZ4hU+vP9d6qEGDBlU1HA0NjSpEEz6NakFBQQGCIFQoUt27d+8qHJGGhkZVoUV1alQLioqKACgpKaFP2y40rVOPu267o4pHpaGhURVowqdRLSgsLEQQBJpG1WXhc+8giRKmAqmqh6WhoVEFaK5OjWqB1+ILtPiBIGA0GMDu/J1PaWhoXI1owqdRLSguLkYQBFZs3cCSrWvZe/oo+la1q3pYGhoaVYAmfBrVgpKSEhRFwe1289D7rzD30M+IAVpxag2N6ogmfBrVgpKSEgRBAMBisWipDBoa1RhN+DSqBWVlZQAIgkBISAgRERFVPCINDY2qQhM+jWqBV/jAk8Res2bNKhyNhoZGVaIJn0a1IDowjMOfrWLr+wsx6wya8GloVGO0PD6NasGd3QcTHR5BzeAw+ra4RhM+DY1qjGbxaVQLfjtxiFJrGbIis/dkIr6+vlU9JA0NjSpC68enUS2IjY0l2i+UUbfewrRZH3L8+PGqHpKGhkYVoVl8GtWCgoICftm/E9ms09ycGhrVHG2OT+Oqx5VewMGZK9h74ghH7EWa8GloVHM0i0/jqsd1OINgvwA6NGpBmGTRhE9Do5qjCZ/GVY8YZKbE6snjO52ToQmfhkY1RxM+jasefeva3PrmE7S/L54T6cma8GloVHO0OT6Nqx5BFNiwexuiKHLmzBlN+DQ0qjmaxadRLZBlGV9fXzIyNFenhkZ1RxM+jWqBLMv4+fmRmZmpCZ+GRjVHEz6NaoGiKAQEBJCdnU14eHhVD0dDQ6MK0YRP46rH7XYDnj58AQEBGAyGKh6RhoZGVaIJn8ZVj9VqBcBsNmtuTg0NDU34NK5+ioqKAJAkSWtAq6GhoQmfxtVPQUGB+rdm8WloaGjCp3HVU1BQgCAIuN1uTfg0NDQ04dO4+vEKn9Pp1IRPQ0NDEz6Nq5/CwkIEQcBqtWrCp6GhoQmfxtWPN7iltLRUEz4NDQ1N+DSufoqLixEEgeLiYk34NKoNiqIgy3JVD+M/iVakWuOqp7i4GPDM9WnCp1EdsNvtHDhwAJfLRd26dQkLC6t0PVmWsVqt+Pj4IIrn7KCSkhLS0tIwm81ERUVVeO9qQBM+jauekpISZFmmrKyMoKCgqh6Ohsa/TkZGBmVlZej1ejIyMggLC8PtdnP69GlcLhd16tTBYDCwb98+bDYbAH5+ftjtdhwOB4qiAJCfn09GRgYNGjTA398fSZKq8rD+Ma4uGdfQqISSkhIAwsLCrronVw2N8thsNtasWcPo0aNxu924XC4EQWDHjh3s37+f9PR0cnJy+O2333jnnXcoK/M0aFYUhalTpzJ69GjsdjuCICAIguouTUxMJCEhgczMzAr7y8/PJysr64pzqWoWn8ZVT2lpKbIsa1VbNK5oXC4XNpsNi8WCIAgV3nM6nRw8eJCysjL8/f2ZNm2a+l5xcTGiKGK1WlVBEwSBzp07A6jWXYMGDRgxYgSiKKpC5t2PoigIglChrVdaWhrJycmIokhWVhZ6vR6z2UxYWBgmk+lfPx9/B034NK56vBZfZGRkFY9EQ+Ov4XK52Lt3L263G19fX5o2bQp4LK7MzExyc3ORJAlRFFWRAir8LQiC6vHwLvf+lmWZ6667Tl3mxfu3d3lKSgolJSUcO3aMDRs28L///Q+DwaD+j+Xn55OWlkatWrXUYLL/4vSCJnwaVz3eqE4tsEXjSsVms2Gz2ZAkSU3POX78ODk5OYCnDm15K/B8wTpfAM9//3wL0vseeKxJnU5HaWkpFosFvV5PTEwMp06d4tChQzRr1gydTlfBPZqSkoIgCBQWFhIREUFUVBQ63X9HbrQJD42rnpKSEkRR1IRP44pl5syZHDlyBFmWWbVqFWVlZWRnZwNUsNC8lLf4zl/uXVaZIFa2XnFxMW63G71eT1paGrIsYzAYSElJoXHjxuj1erVARHlB9e4jIyODPXv24HQ6/8lT8rfQhE/jqqe0tFQTPo0rlqlTpzJ9+nT69etH586d2bp1K7GxsWqfSfCkJVxMAMuLkFfoyv+cL4TnfzYwMBC9Xo+iKAQGBqpzgPPnz68wl+fj46N+rvy+FEXB6XRWiCCtajTh07jq8fbj04RP40pj6tSpzJgxg40bNxIeHs7kyZPZvHkzWVlZnDlzBqgobl4BPF8EywernD+Hd74QlhcuWZYpKCjA7XaTmJiI2WxGURR0Op2a2lDeYvR+1ps7Wx6n08mePXvYtWtXpSJ9OdGET+Oqx/uUqQmfxpVEedE7ffo0HTp0YMqUKeqD3NGjR1UB8QatuN1uVRC9VBasUl4czxch7+tdu3Yxe/ZsNX+vZcuWmEwmde6uvOvyfCuvpKSEgwcPqqJZfn9Op5MzZ85gt9v/sXP1Z9GET+Oqx5uQq6UzaPzXKSwsJC0tjQ8++IAZM2awbNkynnvuOXbt2sX06dN58cUX1XX9/f0r5NoB6PV6atSocYEbc9++fQAXLPf+bbPZVGtRlmUEQaBRo0bs27dPFS1RFJEkCavVSkJCAsuXL69UPK1WKxERETRr1oyAgAB0Ot0F4pqUlMTu3burzPWpCZ/GVY/D4cDtdlOjRo2qHoqGxkWxWq0cOXKE06dPExERwf3330/nzp1ZsWIFbdu2RRRF2rdvT3BwMACffPIJRUVFZGdnc/LkSaBimoJXbLKzsysIjKIoavoBeMRvzJgxarK7IAjqw+KwYcOYMGECmZmZuFwuPvroI5555hl69uxJfHy8WgO3qKgIWZZJTU1VozfLzy263W6ysrJU68/Lnj17SElJ+XdPbCVowqdx1eN0OhFFEYvFUtVD0dC4KFlZWVitVkRRJDAwkDfeeIOuXbtiNptJTEzE4XBw9OhR8vPzAdi7dy/9+vVjyJAhvPLKKxeN0AwLC6NDhw5kZGTgcrlITk5m9OjR/Pzzz9hsNubOncvgwYNVd6kgCOj1evz9/bnmmmvw8fFh+PDhdO/enc2bN1NaWqqmLwCYzWZMJhOSJFGzZs0K73l/u1wu4uPj1dSi8sKckZFxeU5wOf47iRUaGv8SLpcLo9FY1cPQ0KgURVE4fPgw3bp143//+x9DhgxBr9ezYMECNbl85syZJCYmMnv27ArzeqIo4nK5OHr0KFOnTmX48OHk5ubSrl07NbfPu/7KlSv5/PPP1f0+/fTTANx2222MHTsWRVHIz8/Hz89PdU+aTCZ69uzJli1bGD58OA8++CAAhw4domnTpur43G43VquVkpISQkNDL3Bt2u12IiMj8ff3v+A9vV6PzWa7rNVeNOHTuOqRZVmz9jSqHEVRKCgooLi4mMDAQPz9/XE4HGzbtg1RFOnevTu5ubkIgoDRaFQtOIfDwX333YckSURHR/PQQw8Bnuu6fI3Mb7/9lm+//RaAjh07MnnyZHx8fFAUhR9//JH58+f/7vgOHDhAkyZN8PX1RRRFDAYD1113HRaLhYiICEwmE4qi0KhRIzWdwjv/ZzQa1fe9gnjw4EHS0tJYsGABEyZMqBCB6v2s3W5nz549tGrVSk2J+LfRhE/jqkeWZfz9/at6GBrVnN9++w2n04miKKSlpfH222/jcDh49NFHMRgM3HrrrRQWFqqisWvXLqKiojh16hRt27ZFkqSLWkW9e/fmp59+UoVwx44d3HvvvcTFxfHLL7+wbdu2i45rwYIFGI1GmjVrRteuXREEAZfLhd1uV+tv9urVq8L8nF6vV6cQyhd+P788WuPGjbHb7bhcLjp27HhBYn1592xOTg7R0dF/8yz/MTTh07jqURSFkJCQqh6GRjXG6XTicDgqRFXWq1ePuXPnqiLzww8/IEkS9erVQ5Ik1q9fz5o1a3C5XNx2223ExMQwY8YMdDodI0aMQJZl9u7di9FoJCEh4YIOCYmJibz11lu/OzavWzQoKEgVMb1eX2GuDjyuVbfbrQpzamoqNWrUQKfTqdVboGKuoF6vp127dnz22WcXtDQqKChQXZ+CIJCenk5ISAhms/lvnes/gqBUdSahhsa/jCAIDB48mO+++66qh6JRDVmwYAG33nor69atU+ea7XY7N910E1lZWVgsFvz8/MjMzMTPz4+33nqLxo0b43Q6ufnmm9XSZF7uvvtubr75ZhRFITMzkxo1auBwOLj11lspKiqiVatWZGVlUVRUpAbClKdmzZq0atWKHTt2EBAQwOeff45er6/UcoNz1pnb7ebIkSMkJyfTvn17wsLCEAQBm82G1WrF398fURQvWi6tMs6vFSpJkmrd/ptoFp9GtaBWrVpVPQSNakRiYiLffPMNr7/+uppwPmXKFHr06MEHH3xAeno6iqIQHR1N3759WbhwIbGxscyYMQM/Pz8EQcDtdvPggw8SHh5OvXr12Lt3L8888wwNGjRAp9MhyzJRUVFqObHo6Gj69+9Pnz59MJlMyLLMihUrmDJlijous9nMV199hSRJlJWVsWzZMrUKy/nFqs+PEnU6nfj6+nL99der1qB3nXHjxjFixAhGjhxZQbTcbjcOh+OCubvzi2KXnxd0Op3/uvBpFp/GVY8gCLz99ts8+uijVT0UjasURVE4ePAgixcvZsmSJSQnJ6tdFIKDg+nfvz8LFy5UA0KaNGnCe++9xy+//MKsWbPo3r07TqeTxx9/XI2ozMrKIiAgAKPRqIqMt6u6wWDA4XDwxRdfcOedd3Lw4EEeeughvvzyS2JiYlQhsdvt9OzZk5EjR1K3bl1kWWbYsGEX7dpQ/njK401uPz9S1O12M3PmTAYMGECdOnUAT27eo48+yo033ojBYABgzJgxSJKE2+2utBm0d9+BgYE0atSo0m4R/ySaxadxVeOd9/D2L9PQ+KdQFIXdu3ezZMkSFi9ejM1mIy4ujsLCQlX0unXrxrZt25g/f75qla1YsQKbzcbtt99OUlIS9erV44YbbqBhw4bqdn/++Wc2bdrEE088UaHKSvn5L4fDwezZs9m7dy+SJOF0Onnvvfd4/vnn8fX1Ra/Xo9free655+jVqxcGgwGn06kKl9vtrlBVpbwolbfmytfzLF/ZJTMzk+DgYO6+++4KglhaWoqiKCxevBhJktDpdPTs2ZOQkBDmzp1Lly5dsFqtdO7c+YL+gHXq1PnXRQ80i0/jKqegoICgoCBOnjxJbGxsVQ9H4wpHURR27NihWnaiKDJixAji4+PZsWMHDzzwAOCx8oqKinC5XADodDqee+45DAYDX3zxBadOnaJBgwbMmTOHvXv30qRJE7WJLHhyT5977jnq16/P9ddfj7+/P0FBQaq4nDhxgtdee4169erx2GOPATB9+nR27dpFz549kWWZ22+/HR8fH1wuFy6XC71eT3p6OhERERQWFpKRkUHTpk0RRRG73U5BQQFhYWFqeoKX8yuwlBc5r3jKsozL5eLgwYNMnDhRFf7x48dz2223oSgKL7/8MuvWrQM8nRzWr19/QcPcDh06/OtuTtCET+MqRlEU8jYewFDiRF+vBqamUVU9JI0rELfbzZYtW1iyZAlLlizB19eXESNGMGLECFq2bElxcTENGjQgKytLtYxkWUYURVq3bk1iYiJ169YlIyODHj16sHHjRh555BE6d+7M6dOnVdfe+VYWQGpqKlFRURdYQbIsU1RURFZWFvXr10cQBH788Ue6d++O2WzG5XKpffMURWHv3r0kJSUxZ84ccnNzVZfrm2++Sffu3SkuLmbChAlMmDCBrKwsXC4XYWFhtG3bFqhYhNor0IqikJubi8FgYOHChSQnJ7NhwwZ17GFhYXz77beqkDkcDp555hk2b94MePIOvWUEvcfXvn37y9KwVnN1aly1KMU2jFYZnU4Pp/NQmkReFjeKxpWPy+Vi06ZNLF68mG+//Zbw8HBGjBjBmjVrKrjNn3jiCaZOnaq+VhSFli1bcvPNN7Nq1Sp++eUXevXqRdOmTdm+fTulpaX07NmTVq1aYTabady48UVz2xRFUYOyzi8sLYoiQUFBWCwWTp06haIofPnll/Tt2xdBENDpdCQnJxMeHg7A999/z/fff1/hGAVBUPP2vHOG48ePr3BsTZo0AVCjUb1uTofDwfz58/n0008r9AUsz5gxYypYsQaDgalTp9KgQQP0ej1Wq5WCggI18tTrFr0caMKncdUimA0Ul5ViECWkIAsmTfQ0LoHD4WDDhg0sWbKEZcuWERMTQ3x8PJs2baJBgwYV1s3IyKB+/fqUlZWpy/R6PW3btmXy5MkYDAbatm1L//79WbduHevWrWPgwIE8/vjjqtDAhf3xznf9Vdb9oPwyvV5Pbm4uEyZMACAtLU0Vy6ioKL7//nvWrFnD7t276devH+3atWP+/PmqWB4/fpzo6GicTieZmZnqPlq0aFEhCMaL1wX68ssv07lzZ+655x5mzpypunTL079//0qjN0tLS6lduzb+/v7UqFEDp9OJ1WrF19f3j3xN/whakWqNqxarw07r8UO44YV7+TRhdVUPR+M/iM1mY8WKFdxxxx1EREQwadIkmjRpQkJCAgkJCUycOPEC0Rs+fDiRkZGq6Hnb9RiNRpKSkpAkSS3hNXjwYNXVFxQUhE6nqxCleX5UZWXLyotH+Wax3tcdO3Zk0aJFDB06lEceeYSUlBTcbjcul4sjR46we/duGjRowMSJExk0aBDvvPOOur2jR48iiiJr1qyhtLRUXe4dc2VjEQSBF198kQEDBjBy5EiGDh1a6bnduXOnejzlj8vbXcKLtyB2ZdGe/xbaHJ/GVcvMmTOZOHEioaGhNGrUiJUrV1b1kDT+A5SVlbF69WqWLFnCqlWraN26NfHx8QwfPpyoqAvngb037YSEBDp37nxBqH9ERARRUVFkZmaSlZVF7969GT9+vOpmPHXqFKtXryYhIYHZs2dXcP+Bx616fl5cZVagdyznW4VeHA4Hx44dw+l0snPnTrKysli5ciWKotCgQQNmzZqFwWAgOzuboUOHUqNGDRYtWoTBYMDtdtO3b1/KysqQJImlS5cSEhKi5veVp7xAOxwO3nnnHbU4xP/+9z/69+/P/PnzWbx4MVu2bKlwXJdrDu/3qPoRaGj8CyiKwjvvvIPVaqVLly5s2rTpL23HJbtIL0kntSSVegH1yLXm8v2p76nlW4v00nQ6R3Zm3el1pJekE2AIYHD9wXSL6vYPH43G36W4uJjvv/+exYsXs3btWjp27MiIESN45513LtqnMSsri+3bt6vWyGuvvVZhng3AYrHw8ccfExISwsqVK5k6dSp169YlNDRUXSc2Npbx48dz55134nQ6MRgMFcTrfCE4P42gMrdnZdVR9Ho9TZs2VV2Yn332mfresWPHmDx5MjfddBM5OTlERESQm5tLYWEhFouF3NxcNdHeZDIRHBx80aT28ukPTqeT2NhY6tevj9vt5tZbb8VgMPDYY4+xcOFCjh8/Tl5eHoIgULdu3f+E6IEmfBpXKWvXrsXhcNCuXTsGDBjAwoUL//Q2CmwFDP9uONnWbCRBQlZkFCo+/X556Etk5VyNxFVJqxhWfxjD6w9n7pG59KjVg161e/H9ye8pshcRVy+OMEvY3z4+jd8nPz+fFStWsHjxYjZu3Ej37t2Jj49n5syZF9RudblcHDhwgK1bt7Jlyxa2bt1KTk4OY8aMYejQoej1ekaPHs2aNWuAc4LTsGFD/P390ev19O/fH5PJRP/+/S8Yi7c6SvnPlndZnm/hVSZy3tflc+327t1Ly5YtLyj9lZ6eDsDtt99OvXr1+OSTT7DZbMTExNCoUSOCg4MZN24ct9xyC40bN+bgwYPqPktLS/nss8+4++67Kw0G27FjB7Is065dO/z8/Ljxxhtp2LAhvr6+6jF6a3d6cxP/a1ydwqcooAUyVGveffddWrRoQZMmTRg0aBB2u53c3NxKi1Wf/xTvZVfWLorsnnwkt1J55JqiKFTQQgG+Pf4t3x73tIfZkLyBd357h6yyLM+4dr/L8iHLKXQUklSYRP/Y/vjoLk8rlupATk4Oy5YtY8mSJWzevJlevXpx44038uWXXxIYGKiul5eXx7Zt21ShS0hIICoqii5dutCoUSMKCwtZt24dq1evZtCgQQAXREUCHDlyhMLCQkwmE2lpaXTr1q3SubryVlv5dAAvlbkzLyV+4Amwueeee9S0AO9nrFYrW7duZf78+URHR6uJ4bNnz1a3UadOHaZNm6amO2zbto2lS5dy//33c91117F582ays7MJCzv3kOZN0/jpp584duwYrVq1Uucy7733XrVSTFFREQEBAf/pCOqrT/h+eh02TYGoDnDnStBpDUirG4mJiezcuZNmzZrRvXt3/Pz8MJlMrFixgjvvvBMAWZFJLU6l1FnK3Wvvxu62M73PdNrVaKdup014Gyx6CzarDWTQSTrcuFE4e2NyKwxtNJTFyxcj1ZPAiCqC5W9cXtEDz03r+onXY+5gxqA3sCFlAx/0+uBynZqrkszMTL799lsWL17Mzp076devH3feeSeLFi3Cz88PWZY5fPiwOue0detW0tLS6NChA61bt6ZBgwYUFRVx+PDhCuIAHmGLi4vDYrFcUCwaPPOF3rSBWrVqkZiYSIsWLYCKLXrKB3i4XC5KSkoqCLH3vbKyMnx9fdVr57ffflNz6bzb8m7X4XAAnkayK1euVEVs2rRpTJgwQS0hJssyNpuNTZs2kZmZSZ06ddDpdKxevZr169cjy7LanSEuLg69Xk9cXBytWrUiPT2d4uJidDodLpeL4OBgvv32WwRBoKysTC0Q4R2T0WisIJb/Va6+4JZXa4DLRqkT9Hd9hyGiGWx6CwJqwTX3w2WMHNKoGu6//378/f358MMPSU5OJigoiPr163PNNdfw9ddfA/DIT4+wKXUTkiBhdVlBgPY12lPHvw5dI7tyfcz1ADjcDtp1bYfJbeKW225h7vy5pNdJJ6hfELJdxuBjwKW4kO0yyCDoBARRAAX06Hm337u8MPsFcuvkAqC4FUxbTNg62RCNInUD6rJ86PIqO1dXKikpKSxdupQlS5awf/9+Bg4cyIgRI+jXrx8ul4vt27er1tz27dsJCQmhbt265OXlkZqaSm5ubqUh+H+GmjVrMnnyZCIjIzGZTLjdbnJzcwkPD1cLR5d/ALLb7bz88svs27cPHx8fNU8uJyeHH374geTkZGRZ5oUXXsDhcPDWW29x4MABPv744wpF1r3bfPbZZ/npp58wm82sXbtWdYFarVZWrVrFwIEDkSSJrVu3MmXKFBwOB99//z16vR5Zlvnss884fPgwZrMZk8mE2Wzmvvvuw2AwYDQaadu27WWNtLycXD0WX1EGZB+B2B7YDv+A0w2duvZh/cSuhBXtw60I6PcvhoAoGPwBWLT+bFcj+fn5zJs3j3nz5rFy5UqCgoIAT17Snj17AM/T9YbTG5AFGdkpI+o8rqf92fvZeWYnK06soF5QPeoG1MUgGejUvBPHjx8nPzefzNRM/Ef5gwKiXsSluDwJxUYRFLBn2TEGG3EXufmw+4fUcdfhZPJJ/KP88Tf4k/9+Prv37aaub11MUSYmDZykjv23M7+RZc2id+3e6EV9VZy+/zSnTp1S62IeO3aMuLg4nnjiCWJjY9m1axc//PADL774IsePHyc0NBSr1UphYSFOp5OCggJOnDjxj45n9OjRatWUxMREAgMDiYyMBCrm2gEUFhYyb948Nm7cCHiCYh555BEURcFisfDggw8SFRXF+++/z/XXX19hP7Nnz+bFF19UXyuKwgsvvMBPP/0EQP369Svsy+l0cvz4cdauXUtBQQE7d+4kICCA0NBQNQFdkiQ+++yzC9yRdrudwsJCAgICrlrRgytZ+NJ+g1WPQ0hD6PMifNQBl8NOmWDBVwKjBHvG+5B8aifBAZ4vUE7bgzttD3r/KBj4FtgKQW8GSbvJXC189tlnDBw4kMTERLp180RX7sjYQeT1kSRICfxw+Aem3D+FnKgcgnoFoZQoEACCKGBz2wCwu+3k2/JJEVOYtHUS+V3ysR6xkpKagv4WPVKAp1ah7JTBDZwtLSiIAsYanhwtXYiOg/qDvPPwO/gN8POIpOjihQ9e4O677sbYwggS/JzyM63CWrE1fSsPbXgIAYFtdbcxqO4g1iatpXNkZ9JL07km4hrqBdarorNadRw9elSti5mSksKgQYOIj4/Hbrezbds2brnlFux2O263u0IFkZSUlH99bImJiaq7cfXq1Vx33XVqj7rzRcPPzw9/f3/i4uK48cYbiYmJ4dSpU4wdO5axY8cycOBAwBNY8sEHFV3fa9as4bnnnlOjLAsKChg7diwul4uNGzfSv39/dX/FxcVs3LiRjh07EhYWRlhYGLfeeivh4eGEhoaSmppKSUkJERERlc7BGY1GNQ3jaubKdXW+GQvWPBRF4VSBTGygeMkQ4PK4ZAGXuQYm+xkE0QgxXUEABr8HgbUv/7Fo/CO4XC7q16/PokWLePPNN4mPjye4czDPb34eu9vuaa3iUkh9IxVDsYH538znjYQ3OBN2Rt1G+WunsV9jjhQdQVAErGusKMcUjPcaEfUeCzH/53wyF2cSOiCUsAFhnmvo7DZQ4P769/NAzwcIHRZK6MBQovyiSN+STnjTcLL0nnk/EZGNN21k0b5FfLDvAwS9QOPAxpwsOolD9txUdYIOg2Rg7ci1+Bv8L/t5vZwoiqe9j9eyy8rKolWrVrjdbn777TcKCgqqeogVaNOmDTqdjoSEBIKCghgxYgR33nnnBV0H3G43p06dol49z8OLIAhYrVYeeOABunbtyi233ALAV199VSENwcsPP/yAv7+/WoPTaDTidDoZNmwYN9xwA+PHj0cURRo1alRh7rAyzg+WqY78d4UveRusfQGir4HrX74wSnNKPZTSipPNlQnexZI9y693dk3khgPQ3bLgXzwojX+TJUuW8Pbbb7N582Zq1qxJQkIC3+V+x8w9M1GEs40u7TLxcjzrv1rPT5t+ose8HhS7iy+4Zs7/t0j/Op38n/Jp+EpD9JF6TxCLAIpD4eTrJwnqHkRQjyBVFMt2lBF9OJrdRbsJ7ReKmCxi6WHBrXcjIKhpEUbJyBcdv2DI8CHUfbAuRUoRupM6CpsUIkjnrmdREVkzcg01LTUv92n911EUhT179rBgwQLmzp3LmTNn/vb8W1WyaNGiCoWl3W43X3zxBbfeeqta81JRFNLS0rjtttuwWCy8+OKLhIaG8t5775GcnKxGR3q7IXTv3p1u3bqRkZGhiqTdbicqKormzZtX6AKh8fv8d8/SN3dBcTrOpG088soMbmuu0CTYybq8SBJcTQn3acGEoA1ARXEr/9vLxUTv3GuwuxW+XLQaqewT7rrrrj9/Acluz4/O8FeOVuMf4L333mPChAkcP34cU00T2cZsko4kqZaeLc2GeELk3RXv8umnn/LFvi8odhV7BOy8a+L8hyhDiAFkOPriUZpOb4qoP+vKMoBvU1+ylmcR0CEAzFD0SxFisEjuHbnUprZHcGNkj+h596GAz2Ef+sX048YVN2J+wswNLW7gxL4TrG+4HkEUUGQF2wEbBELRliKKuhRRs+GVL3xTEqYw9/Bc9Gl6dj27Cy7jo7coioiiqFZKsdvtas/GyvA2T9XpdIiiiNPprNSLVJ6xY8fSq1cvYmNj2blzJ6dPnyY1NRWdTsftt99OaWkpr732GocPH2bNmjVce+21rF69mttvvx1JktQWQeDpmD5mzBjCwsJYu3Ytp06dokWLFgwaNIjatWuj13umaTTB+3NUncUnu2HfIs/8WrPharSloijkn0nB/ElXjK5CANwKOFxgNnhuQg43HMp20bqm7qLWXfnX53N+fs2rm+zYTaFM25CF3mQmMDCQ999/n7i4uD/mElj7Emw+W/9u8IfQ7ra/elY0/iK//fYbQ4cO5eTJk7z91dvMled6rHndOfGyJ9mRgiQcqQ4cax0E3BeAYLjw+73AcyDD6fdOU7KvhLC4MMKHhZ9bT1bIXJhJ+LBw7Bl2UmemIooidV+uq4qjGnRQ4EQfqFdTIcJ3h5PVNguEyq1MQRCQXTLpX6XjE+ODqbaJ0HqhRAdF0zK0JXpRzz2t7yHYVLH24fnIsozT6cThcOBwOLBarRQXF1NSUkJBQQE5OTnk5uaSl5dHYWEhBQUFlJSUUFJSQmlpKVarFZvNht1ux26343A4cDqd6jadTicul+t3BcFzUNBsdjPV+j4x6QT2NPslP+IVKqPRiI+PD76+vgQGBhIWFkZoaCiSJHHixAn27dtHvXr1uOmmm4iLiyM4OBiz2YzZbEYURQoKCjCZTMybN4/7779fnZ+rbH+yLKPT6bj11lsJDQ1l+fLlHDt27PePrxwBAQHIskxxcTHgqdVZVFSELMsEBgYyY8YM7HY7U6dO5eDBg8iyjMVioaSkBEEQeOyxx4iIiODDDz8kPDycCRMmEB8fr4qdxl+n6oRv42SUX9/Fbrcz90x9vj7mS2ZmJmkpp0m6TyLQJCBUckOozCX1Z/3V5bfndIPxtWL1tdlsxsfHh9LSUurWrcunn35K586dL76x1F0on/byTu9Qhg+G51K1J7DLzB133EHTpk0ZMGAAo2eORmjvSSuo4NJ2K4g6EbfNTfHeYgI6BHhSD7h4GSiA/J/zSZ/jqYTR7LNmCNK59dK/Tid8UDj6YD1um5vMeZnYUm3EToxFNIgVtusqdiH5eiJh7Jl2Sg+VEtwr+OJuVgVkhycKr7xAq8cjK5TuLyXl/ZSLejv+i8Q+E4tPHR8Eu0DyS8mMu2Mcjz/+uBoR+Uew2WwsXbqUWbNmceTIEe666y7GjRunzqGVx+12s2/fPgoKClAUhdGjR5OVlVVhHZ1Oh9vtscgjIyPp3bs3gwcPJjw8HEEQ2LJlC0899RTgEcaQkJBK8/oEQcDHx4fg4GCys7Ox2+3qckVRiI2NJT09HZPJRElJCb6+vlgsFoqLiwkJCSEpKQlfX18GDx7MDz/8QL9+/Xj44Ye55ppr/swp1vgdqi5eNf80uOwYRTd3RSSyuusuEoalcfI+iSAfAVGs+I/upTKXVPn3/ijez41eYq2wvKysjNzcXGw2G8eOHaNbt2506tSJI0eOVL6hM/tVV42iKPxwqBCz2cyECROwpuyBFQ/D/iV/eFwaf55vE75lR9sdfG35mqGThkJrVEEDUOSzouKdM9MJlBwqUV2cFcTRa53lOVFcnuUBnQLUbbmKXep6+ZvzKdlTQsmhEtw2z02z5i01iX0qFlu6DdkhozgV3A43slMmd10ujmwHyGAINuC2eqIQFUXxRIh6/3bI6jUlW2UE/YWi50Wn0+Hv74+vry8mkwmj0ai65f4LiKJIrVq1eO211zh27BiKopD4SiKLhi9i+z3bObT3EIqi0Lx5c8aPH8/Jkycvub0jR47w2GOPER0dzZw5c3jwwQdJTk7mjTfeUEVPURSSkpI4ePAgCxcuZPv27ZSVleHj46mQEx0dDZzr/xYZGcno0aPZsGEDx44d44knniA1NZV58+ap51qv19OmTRtiY2ORJKlS0TObzfj5+dG7d2/mzZvH999/T926ddXzEBISQseOHXn00UeRZRm3203Dhg0JDg7G7XaTlJREaGgoJpOJOnXqsHfvXubPn6+J3r9A1Vl8RRnwWV+UwmTK22uyoiBw6RI+cKHlV369S/1dfpuKAg0+LOFk/h87BV26dFEnrr3kZyRx5LlmtKopseSwi9u/tfJGHxPxjXUE+0CQj4giGZHu3gA1m//h06NxaWRZZuPGjXz22Wdsr78dn7o+qhWEjBpk4nUrIpazlJwKeT/lEdwzGNEoVnp95fyYQ1DnIESTSNHOIlJnpQJg8DMQMiwER66D0N6hSH4ShdsKyfs5D596PtQcXhPRKGLPsJP5TSaI4N/Gn8BrAlFkBWeB0zNfKIAj14FkkpB8pHPjkxVKj5Rirm9WBa8yN2jx/mJEg0jO9zmU7C+5fCf+IphMJmrVqkVwcDCJiYm0bNmS+Ph4hg0bRu3avx8pnZ2dzfvvv8/06dPp378/Tz/9NM2aNQPOWXczZ87k6NGjqnXnFZXzSUhIwGq1YjAY1E7oXhfvoUOHeP7552nevDmjR49m6NChZGRksGLFCr777juysrIYNGgQcXFx9O7dm6KiIhwOB7Vq1UKv15Oenk69evWw2WwV9unr64vT6USWZd5//31at26N2+3mk08+wWq18uqrr1K/fn2Ki4u57777+PXXX7n22msZN24cdrudO++8E0VReOmll7j11lsxm81//0vRuCiXX/hkGZaMQzm2huM+rYnJ/xWdcGEkZmXuzN9LVbiUOFa23vSdDu5fden5hcpYOMKHkc2MCG1uoce0/WzatIkDBw7w0EMPkbp3I3vu8cVHd84CLXPCsUIdzaN80XW5D3pO/NP71PCQnJzMnDlz+OKHL7BEWGgoNWSLbgvB1wer6QTuMjeSWbrkdpx5TiQfCdEkUv7Jy3ttnHrjFLbTNvTBeuwZFd1VukAd9V+uj+QvqXNVh8YfQvKVqPtsXfShelI/TSVsYBjGKKPH+hR+/7oGzzVz/NnjBPUI8rhBdcIF63vXQwbFpXDi5RPY0//8dfxX8fPzo127dgwbNgw/Pz9WrlzJunXr6NixI/Hx8QwdOpSaNf9aEE5hYSHTp0/n3XffpXnz5oSHh7N27Vratm3L3XffrZbUOp8jR44wadIkvvvuO+rVq8d7772HKIrYbDZ8fHwoKChg1qxZ3HDDDVx//fXs37+fFStWsHLlSkJDQxk8eDBxcXF07NhRLbR8PgUFBcTExFBYWFhheWxsLFlZWWo/u759+/Lss88C0KxZM7U+bEJCAqNGjaJRo0bs3LmTL774gqCgIGw2G6WlpQwcOLDapxlcLi6v8JXmwMpHIPEHkB24ZYVB82wsH+2DQcRTA7H84C4SrKIoCk43IIAkwNkKUQiAS/bM28ko6EQBveh5vTnFxTeHXLzTz4RBgp9OuRi60Eqp89JD1olwTS2JIzkyOWUKtfwFjj/oi1En4JYheEoRpoBw3n77bWoGmkj7fAyjmngCcgQgucyIQbYSczbP0C1DQvtpXBM39p8+u1ctNpuN5cuXM3v2bHbu3EmX+C4kdUxCdssU7SrizBdniBgXgV97PwTRk1guSOfExkv560h2yziyHRjDjR6Xp6ygOBREk+d7Kt5XzOlppysdT3CfYGreVFO1Kot2FXFm4Rlkh0z0/dEoskL6V+nUf6m+uo6XSh/wzl683tdZS7Jw5jkRLSIRoyPUuUrPQVDhuNw2N8nvJ1N6qJSL4U2oFgQBl8uFXq/HaDTidrtxOBwVEr/PJygoiDZt2jBy5EhuvvlmnE4ny5cvZ8mSJfzyyy9ce+21xMfHExcXV2kB8D+LzWZjyZIlTJ8+nf3796MoCi1btuTVV1+lR48eFb7P5ORkJk2axOLFiyksLEQURYKDg+nUqRORkZE4nU5KSkoYOnQorVq1YsuWLXz33Xds2rSJDh06EBcXx+DBgy9qOZ4/rjp16lwwNxgTE6OWGvNiMpnYunUrLVq0QJIkZFnm7bff5q233qJHjx5s3ryZNm3aEBERwdixY9Hr9bRo0UJNddD497m8wvdyMMrZKvdOReRwtkym00KfiFJkRUEnXvgkLJ9ttCCWu2EcyHLz/E8OTuW7ea23iX71dIhnBVAQBM6UyNR8u4T7O+h563oTPnqBzckuun1eRoiPgE6EM6W/f9hms5kjzzUl1HoCu9NNww9KsCoG9o83EWZyczxPps3MUm6+5RZkWWaEtI4bYmyIgEsBoyRQ6lSwuRRCfAT1mI7lybT+1MWUt6bywAMP/LFz5yiD7x+D0my4YVq1SLTfs2cPs2fPZt68ebRo0QKz2cz27dtxN3ETeVskolHElmIj48sMYp6M8STnKJD9XTameib8mvtVfHhSUEVEcXmeTLyBKrY0G6ZIk2r9Zc7NxO1wE3hNIDmrz7oTBQjqGYRvM1/8WvoB4Mx1ogvSISBgy7DhE+OZRypNLAUFLI0sKC4F0SCq5aIUh4Ij24GplskztvNdsS6PNZc2Ow3flr4EdglUIzyT3kkieny0xz2qgCPbQe6PuZRsKcFgMKhWjl6vJzw8HFEUKSoqUl12F0MQBIKCglQX5ejRo1Uh8xaBXrJkCQkJCfTp04f4+HhuuOEG/P3/mYT6w4cPM2vWLL7++mvatWvH3XffzeDBg1EUha+//prJkycTGhrKAw88wLZt25g3bx65ubmIooi/vz/t27enpKSEQ4cOcf311zN8+HBq167Nhg0bWLFiBSdOnKB///7ExcXRv3//303yLo/L5aJBgwYkJSVVWB4UFER+fn6FZZ07d2bLli3q68zMTO644w4KCgowm81kZ2eTl5fH8OHDeeONN9SIU83Su7xcPuFzu+AVzz+SoigU2xU6fVbK7vG+mHRChbm98sI3ZH4pb/TxoUGIyIZTLm78xkpxuf9fUYDSZ/ww6QTcssKZEoX7V9tYdsSFnwEWjfQh2l/kqXU24hrp2Zvp5uOdF5p5ArD4RhP96+n5LtHJ6KU2LHoomOiHThQocyjcud6f2J63cPTgHnKPbGFHUgkmk4mHOwiIKNT2h9tb6fHGVcgKONyeMRq8Za0EAadbIeLtEnKtnlMfGxvLTTfdRFBQED4+PmrYud1ux2q1cvr0aTq4dnB/41z0EiTKdVgdeAchISEVfoKDgwkKCrqiI0rz8vKYN28es2fPJjc3lw4dOnDo0CEOHz6sBm7IkkyNu2ugD9OT9lkako9E7Ydrq5aQ7JQ5s/QMNW/0uNsqs7LsmXaM4UY14MVZ6EQfoFffd+Y70Qedfe1SOHTvIY+ld3abilPh5GsnqfNoHfQBnohOZ54TY4Tnqd2aZCX5vWRq3VsLnzo+uIpc2NJtGEOMlBwoIXNhJtEPROPf1v+cq1X2RHGKxnOBKdkrswkbHKaOy3rCimAQKNxSSPiwcASDgICAYYOB3E25ZGVlYbPZPOfhrBVSmcs/ODiY5s2bM3z4cG688UYiIiIqvJ+cnHxBEej4+Hj69++PxWL5R75rq9XKkiVLmDVrFseOHWPMmDGMGzeO2NjYCusVFRUxefJkpk+frua3mUwm2rVrR1lZGadOnWLgwIHExcVhMpn48ccfWbFiBQaDQbXqunXr9pfSALwW54EDB9RlXqE631J+5plneO2119TXa9as4a677mLQoEGsWbMGi8WCy+Xis88+49prr/3TY9H457h8wrfvG1g6Tn2pKArPbrAzvp2BELPAyXyZ/VlubmyqJ8+qkGtVmJ7gYHmii+gAkWO5MtlllQ91QH0dT3QxsOCAk1m/Ve67TBhnpk2EhNUF8YvK+PFExYu2Y5TEljFmpLMWQdwCK9H+Au/2N2GQBAqsMuFTS3Cel+v6ck8DT3Tx3OyWH3Eyspledb1uTnazJ9PNuLYGfPTnLI95+50sOuSiW7TE9J0OThV4jksS4OXrjMQE6XjuJycphefqD45pb+GDfhICCnP3u/lO6U1QUBC5ubkVfgoLC/Hz81OFsDJxrOy1n59flT11yrLM+vXrmT17NqtXr6Zbt24UFRWxY8cOHA4HFouFsrIyz/yaTofTWfE7trS0UGdCHbXPmVeskCqfG/MGvLisLvS++grC51mJC+bkZKtM4d5Cgq4JUoNQjjx8BEtjCxG3RmBLtSHbZfxaetytRXuK8G/pX2EMgDoneGrKKWzJNhq/1xjJLCE7ZLK/z6YooYjIuyLxifVRUy9km4wuwPMwo7gURL1nuWg8V6bPmesk+d1knBmeAIvy+wsMDKRZs2YMHTqUESNGULt27Uq/6+PHj7NkyRKWLFnCyZMniYuLIz4+nj59+vyjbrhDhw6p1l2HDh24++67ueGGGyoIk81m45133mHGjBkkJyeraQJNmzYlKyuLtLQ0LBYLN910E+3atWPt2rWsW7eOZs2aqWLXpEmTv31Nd+3atYIFp9frK1x/vr6+lJaWMmvWLMaN89zfHA4Hzz77LAsWLGDUqFHMnDkTSZIYM2YMr7zyiha48h/g8gnfy8GguCs8eTpkGLXURU6ZzK40J1anTLhFIKfM4+JsGiayfZzn6fKLvU4eWGVDFKB1TZETeTKFl5jP14nQsoZIYo5MqROKJvriaxBQgBGLyvgu0c1T3QzUtAi8/LMDSYS0R32RBI+lNmSBFaessPRGz0W64ICTu793XFDl4ZMbTNzRWo8gwI/HXfSI0eGjhyIbJOa4aBWhw1jO2ivvvgVPYn6JU+GxNXZEET4cYMKog5+TBR75rQ5RUVEoikJqagrtjElEBBj46oBAenY+sbGxPDrhYa6JMVOjUUci6zdHEAQKCgrIzc3FvGUKIak/ctTSkQ1KZ3Lz8lWBzMvLqyCYDodDFcGLiWNlr//ODTEpKYk5c+bw+eefExwcTGRkJHv27CE9PR2j0YjD4fjdFBXJV6Lh1IaqlXSxXDx1EvjsOs5CJzo/ner6zFmTgynShKWpBUESLhQrp0zZ0TIsTT3XY8mhEgp+LSA8LpzSxFL82vih89OdE0xZqTA3d77Vdeq1U5QdL8Onng/hceGUHCjBkeUguFcwJYdLCLshDFEvUnKghJQZKdQcVRPfdr4Y/A0obk/Kg+QjnbMWFbCn28mZmkOTJk0YMmQIw4YNo379+hdNbVAUhUOHDqlid+bMGYYNG0Z8fDw9evT4RxOlrVYrixcvZubMmZw8eZIxY8YwduzYCtady+Vi5syZvPvuuxw/fhxBEDAYDDRq1IiysjKKiooYNmwYHTt2JDMzkwULFnD48GH0ej3Dhw/n1VdfJSYm5h8b84ABA/jhhx/U194qLt6/GzduTGJiIsuXL1eLTB8/fpzRo0dTo0YNfHx8+OGHHwgPD2fu3LlaWsJ/iMsnfC8FoeDNTzq3y8fX2pm2tfK5h9tb6fl4oAmLQSAx103jD0v5bpQPvWJ1lDkVGn9USp618uH/fKeZ9hESBh2kFnmCUnRnb0TfHHIyuKEevQgysOqYi1c22TGI8HwPI2tPuHh3u+eprmeMRONQgZxS2JDkrrC/ULNA0sO+mMvdHxJz3cQEShikc/OSlaVeePG+n29VuG+VlU8H+6CXYNUxN8MXWfHx8VETa2cP8+XGBg5OlRgZvS6U3w4kMneYkcGNdDjc0Hx6GWWiHxaLhZpmmc03lWKUPCXZTsthrK/zFHViYomJiSE6OrqCaNnt9gvE8PzX5y/Ly8vDYDD8IbH0LjObzWzcuJE5c+awZ88eWo1sRVaDLLK3ZZO1OOsP5WJKFgnZKaM4FAwRBuq/XF9NFvdSmQCqy2SlgkWnOBSOPnmUhm81vGA7qmCeXaQmvMtn5wwlQd2e+hGXogbXePfrzc+TjJ6xZ6/MxreZrycyVBIoTSwl8JpAtUVS6dFSbKdtWJOsFG4pJOapGHyb+CI7ZUqPliIaRcx1zedyFBFoH9meOQPmXPLcKYrC7t27VbErKytj+PDhxMfH06VLl4tGNP5VDh48yKxZs5g7dy4dOnRg/PjxDBo0SBVVt9vN3LlzmTJlCocOHQI8uYl169bFarUiyzLDhg2jQYMGnDx5kpUrV2K1WomLiyMuLo6ePXuyf/9+3njjDbZs2cLDDz/MfffdR0BAwKWG9buMGjWKhQsXVvretddeS15eHsePH2fLli20adMGgK+//ppHHnmE+++/ny+++IKMjAwefPBBXnnlFUwm098aj8Y/y+WbDNKbwFF69iZw7mbwv7Z6pm11sPRGH4Y01jFnj5Ox33lyZJYfcTKhk4G6QSIT13nMu771dBh1Hl9i0zCRX5MvjEgTgG61JVV4agcI5JYphJo9+x3Z9NxcDjL0r6+jf30dh7Lc9P3aqs69AWxNcbN8lMdatLsg9r1irC4Y386AUz4XUOOlUYh00TQKWQGRC1Mx7C6FhHQX21LdPP6jjVr+IlO32lEUT0I9wCPXGBjVwI4gCNQy2ahhPUaAQWZYY8/5UBSFFmGw5kSBx+LTgdXhi8HksV6iyOLtp8fzZh8TORaBQctsHM/3tCEJDAwkKiqKevXq0bhxY+rXr0/dunVp2LChx41WrjRV+VJVDoeDoqIi8vPzKSgoID8/n5ycHE6ePMnOnTvJz8+nuLiYsrIybDbbBS5KgMw2mYhGkZA+IRTuKMR2umJ+lOQr4S51q8ITeG0gkbdHeubYJp3EnmEn54ecCvNgcKHFV+GBo5zoCYIAes/cmjPXiaGmoeI8M55rhPMCrxBAdnlyxLzCqMieHMHK8u8Up6ebQ/B1wShuBXN9M+b6ZnUshlBDhbH6NvLFXNfsSVlwKsh2WU2+923iey6yU/AIbYvQFrx73bsXnF/wuJK3b9+uip0kScTHx/Pll1/SoUOHf9zFbbVa+eabb5g1axYnT55k7Nix7Ny5U7XGFEXh22+/5dVXX2XPnj1qebCYmBisVitms5n+/fsTFhbG4cOHmTt3LjExMcTFxbFo0SJat25dYcwdOnRg6dKlHDx4kMmTJ1OvXj3uueceHn744b/UDXzcuHGVip4gCHz88ce8+uqrlJSUcOTIEerUqUNxcTEPPPAAO3bs4NFHH+Wll14iJCSEzZs3065du798HjX+PS6f8DnLKl0cYITaAQIDGugQBYE7Wul5Yq2NPCsU2qHtrHNh2i/3MGCQPP84Jj3sSKsoev9rq6dlDZEgk+C5F511K4qCxzqDioWsXbInzeHaOp59t4mQOPmQL61mlpBUoPBcdwOPdjbgZ/CIh0mnkPGYH2lFMjV8RQQBnG6lgpCX5/w8LaGSsPbsMk9qRv0gkcP3+7Ir3U1GiczyUWbGr7RxJEcmJlDguphzdR/1EvyW4ebFHkYk8VywUJ0AkU13Gpm338mMXZ75zie6nLuhDm2sp289HXoJ3u1nZOA8K1ar5ycjI4OdO3f+9e/3IohGkVrja6EL0pH2adoFdRkduQ5PQrcCrsKKFflrja9FQMcA7Ol2Trx8AsWleJLOdSIyMr6tfHGXubGesuLIcmAIP0+0yp3vyiw/73JFUZB8JE6+dpIaN9UgqFtQRTE46yn0WlcVLLmzc24Kimrpea02RVaQXTIle0qwn7ET2i8UFEj9JBVzrBnfpr5q9Rh1e+WvmbOBNzVvqok+RF/BhVr+mES9SJFcRKApUB2yy+Xi119/ZcmSJSxdupTAwEDi4+NZtmwZLVu2/Ffmcw8cOKBad506deKJJ55g0KBBarDVunXreOmll9i2bZvadSAiIgKr1UqNGjXo3bs3ZrOZXbt2MXv2bLp3787gwYOZPHlyhQ7kF6NZs2Z89dVXnDx5kilTptCoUSPuuOMOHnvssT/0eYCHH3640rZAZrOZ6dOn89BDD+Hn58fp06cJCAhg165djBo1iu7du1O/fn2ee+457rjjDmbMmIHBoBWs/69yeYQv0eMnr+yJPNQs0i5CIrlQpnaAiEGC0xP86DmnlF0ZFefThp+11MBjOTnK6d71dSXe6eeZH5POPg1bnQobTjkZ2EBf8Wn97P4f+9HK5D4+iMK5J3SdqNAxSiKr1MWLPY2qe7T8zSnK/9ycie5snlZ5kfVyYZLyha5Of6OASXduvS7REt7OpotG+DBvv4Pne5jQiee2KaKQVaqQZ/WcA0mAQBPMuMHjTukSLXGqQGbefiePdzEg4Mkr9DMIuGRPrmNi7sUr0pfHoodgH4GUoku4ICXwifXBkeHwWGflCOwWiG9zX8aWFnHHWBMLEuCB1efE79Trp/Bv50/Z8TJcBRWFL+CaAI81FG7AGGnElmwjb10epjEmFIdC6aFS6r9WH0EScBW7kG2yJ8pRvPCmXv57v8DtLEKdx+sgmSTOLD2DT4wP+hA9kkm6sN6nSwE9qjXoyHJgjDSes76UcyXQEDyi5N/OH1uqTXWjWhpZyFyQiWgS8Wvlh+QreSrInN+mQABBL6ii56X8dez9yJmyM2QXZ7Nr8y6WLFnC8uXLiY6OJj4+nvXr19O4ceOLf39/g7KyMtW6S0pKYuzYsfz222/UqVMHgB07dvDss8/y888/43Q6EUWRsLAwrFYrsbGx6rzX5s2bWbRoEYMGDeKBBx6gT58++Pr6/qUx1a1blxkzZvDCCy/w9ttv07JlS0aMGMGTTz6pdiuvjMcff5z333//guV+fn688sor3H333WryuSRJTJs2jcmTJ/PYY48xdepUrFYrP/74I7179/5L49a4fFyeOb6l41H2LSg3tVfREjqRJ9N8egnbxpppVdOjxe9stfPojxWtg8ENdSwf5cmT2pHm5prPzlmRA+rrWDTSBx+dJ4VAEqHEobAl2U3/BjqkSh5wVyS66FtfpwoPwLE8mbj5ZXw80IdudTwCpD/fzcWFFkRlwud9z7t+pcnL523j/O27ZCrNb3S4YdQSK3UCBKb1M1XIc/TyW6abM8UK18XqMOngeJ7MvP0OHG6BNzc7cP/ONx/tL7D3Hl989PDWZjsvbKx8Ljbm8Rh86vugOBWOTTxWQfx8W/lS795odmWkIQFWp0KL6SWcyL/EzkUwhBqoMbIG/m38sZ+xc2LSCU9aQLGLoO5B2NPslJ0oo/6ks/N7ssKh+w+hD9ATdVcU5obmSh48Ll4tpXyOn2eh94up+P0gQ+nRUnRBOtwlbsqOloECIb1DcOQ7MIQZ1NzA8vuxZ9vR++s9xaYVKDtRhqmO6Vx7Iyq/VioTPHVOUfaMTxAFBLdA5pRM6gfXJz4+nuHDh1cIHFEUhc3pmxEFkc4Rnf+2xVfeurvmmmu4++67VevuwIEDPPPMM6xdu1ZNrQgODsZms9G4cWOaN2+O1Wrl559//sNVU/4Oubm5vP/++3z88cdcf/31PP3007Ro0aLCOo899hjTpk1TX/v4+GCz2fD19WXChAm8/vrr9OnTh9WrV5Odnc0dd9xBfn4+bdq0YdasWXTu3Jkff/xRi9i8Qrg8wvdxF8g6iOf+cq46i/ef+7cMj4hlPuZLiNnzVPzEWjtvlwt6GdlUx/PXGllx1Mk3h1zsOyMjnzfyhzvpubaOjgH1dWeDSzz3rz2ZbhLSZEY19wSBhJgFREHA7lL4OcnF9fXOtTcatdjKV8N9Koidd6xezr8hXWz5pU5tZTdfbxzF+TdAl6xUEG5FAVEU+DXZRc85ZRRM9MNyNsDGJZ+tZiN6ciPHLLfxTHcDDUMkdTx2Nzy6xsb0SvIZy3NLCz0zbjDhaxBIKpCJfa/ympBNZzVFNHhC7JOmJRHQLgB9iJ7MBZk4c5xYmlvYf4OOMEHG5lKIebek0oo5Jh082MnAr4OjKQwxYk+3c/qd07iKXMQ86hFXQXc2aMQFyR8k49fWj8BOgeRtyiN3TS6CXsCZ7aTJ9CaecmSVnOvzudR3rCierg6AGu3pyHWgD9SrLlDZKnPkwSNET4jGr7nf2YVULAGvnC2lZpF+V4jPH0NlY1WRQZAFGlkb8WSnJwkNDVXbBHnnY10uFz/m/Mh3+d8hiiJPdniSkY1GVnouLkVZWRmLFi1i1qxZJCcnM3bsWMaMGUOdOnU4deoUTz/9NCtWrKCsrAxBEPDz88PhcNCyZUtiY2PJyclhx44df7pqyj9FUVERM2bM4J133qFjx44888wzNGzYkDlz5vDMM8+o9TfvuusuvvjiC0wmE7fddhuffPIJY8aM4ZNPPmHt2rXceeedxMXFsWHDBk6ePKlafRpXDpfH1dntEU8OnwCK7HERSeVMo7YREvZn/dhzxo2vQcCtQHapTMnTfpQ6FF7aaOfdAZ58ugYhIpF+IoMa6PgowcHLPzuI8BWQFXhvu5MtKW761dOp+XgC0LqmRFqRjJ/x7JM4nhuIQYKesedEzyV75r7Ot/DKu2fPFyUvld3AKhM39WZayTaFctsCj2jbnQqiAFK5fDCrC0TRkw/oVqDl9BLe6G2kRQ2RekESurPzfi43nMiX+fawi0c6i+pxmXRwfV3d7wrfjydcFNgUjBJM23rx3JGs5VmEDwnHetyKKcJEcM9gBL2AZJZImpJEWP8wbqptpKPNzrK3Ui9aJu71XkZGdzTxYw2PBWuMOht1KoO5gdnjDjxr7SgoiEYRd4kbwSAQcn0IIX1CQPGMx1t6zDvX5j25lVnelX4/sqJabiWHSijZX0LNm2qCCLpAnRrsAiAaRASdgLvgXBCOdy5OvQZEQRU9737LXyPlqUyIz6fCPKCo8Oubv7KNbej1evR6PTqdTv1br9dj62HD2ciJpEgczT960e1Wxv79+5k1axbz5s2jc+fOTJw4kYEDB5KTk8Nzzz3HokWL1J5zvr6+GI1GWrVqRY0aNUhOTubYsWPUq1ePcePGsXjx4j9VNeWfxN/fnyeffJIHH3yQ2bNn8/rrr/PII4/Qtm1bnn32WWbPns3MmTPp378/RqOR/v37M2vWLF566SWefvppnnrqKb766isGDRrEnDlz8PPzY+fOnbRq1apKjkfjr3N5LL78JPigg1qfc+5hiRsbuTFI5yyc8q69o7kekaod4LH+nG5Pn1qv1eOUwSB5LKEPtju4p70BSYB9WW5GLbYyvIme57ob8TOeu3lsOOmkUy0dehH00rnleVYZf4OAVInYVSZ+f9RFVJkbszwXc3uev0+Fc2kRigKnC2U6flqGRQ+nCytu8/ubfehbT4fTDSuPOvkwwcmm0x63483Ndcwc7INZDwU2hb5flV0wh1oZAmDUgc31u6sC4N/en1r/qwUiFO8pJuWjFJpMb4LkI2FwyTxz/AzvziuoNBr3szgTt7bU80jNMDZZfCg+UMLpt08DENIvhBrDa+AqdKEP1aPICoVbCz35c766Cuev7HQZpgiTp0yYS8Z+xo4p0nTRh5bKUMVSAUeWA0eWQ83x8+7H6yIFSJmRgrvYTcToCBRZwRhlvKBOZ/nPVXZN/VGrtMLnFOhVuxfv9XrvosciyzI33HIDed3yiI2J5Z2e71DTcuki0l7rbubMmaSkpDB27FjGjh2Lv78/L774Il999ZVarsubctOqVSv8/PxITEzEZDL97aop/zYrV65UhVpRFEwmE506dUKSJDp16sSvv/7KJ598Qs+ePRk9ejRGo5H8/HySk5Pp1KkT33zzzd9Om9CoGi6P8JXlwTvNcbsduCQLp0f8SHiNGgRsfAl2f875/+slDgUfHeesNsHjthMFT7kvq0tBJwj46FGFAbzFqxVMr5Xw0UAj/2trQBI9QtljThkOt8IdLfXc18GzvMKJqGTuzrv8Ylbbn5pDOg/vOmlFMmEWEUnwzEuWnycsf5MrtCmM/MbKL8lu7BepKeytNJNWLPP4j/YKwT/guY+LAr87t/d3CewSiC5YR966PGSbTFDPIKJH16ST08FH2dkkZrlpMf3CosohPgLT+hkpcyo8vtFBaSX1VJvMbIJklCp9sKggRpfQtUvNu3qXA8g2uaLl6FYqJre7UbsnyE5ZTWko2FqAXys/jzu0koCmv4OiKLhL3Yh6EYPRwLOdnyW+Qfwl9/Hiiy+yYcMG1q9f/7uRhvv27WPWrFnMnz+fLl26cPfdd9OjRw+mTJnCrFmz1D503u00b94cnU5HYmLiP1415d/k/fff5/HHH+epp57ixhtvxGQy0aJFC7VH3tGjR1mxYgX5+fk8+OCDdOrUic2bN6MoChMnTmTixIn/6ePTuDSXx9VpDob/bUA6tQmp8UAaBpwNLW45HGXP50DFm9CeTDcZxQpxjXS4Fc+clEUvYJA8ItZ2Zinz4820jxQrBHUIgoBOgkENJP7X1oAoesL+e8wpU91rJ/LsNAwVaREuEel37iZWmcVVnt+b66vMqquM82+uwWaRneludqa7OZjt5pluRmKCJHWd1CKZo7kK93xv43jepS20lCKF+EXWi76v8O+LHkDh1kL0ej2+Jl8Mvgbce90EJp/m3VESdgUOZFV+HA6dL68fjiQ0NJTmzV0UFhaqBZZLS0sRTALS2TI4l3QDipU/rHj/ruz7rcxNLflIFb93b1qD93uWym37rHUomSTMsWbKjpXh39YfQVf5w9DfQbJIPNb0MYa0HEKwKfiS6y5ZsoTPP/+chISEi4peaWkpCxcuZNasWaSlpTF27Fh27NjB4sWLueeee0hP93Sf1+v1aiUVl8tFWloaMTExDB48mIEDBxIeHv63j+1y8NRTTzFlyhSMRiPXXXcdkZGRxMTE4HQ6iYiI4OTJk2zatIlZs2axYcMGQkJCOH78OAaDgQULFtCrV6+qPgSNv0nVNaIFyEpE+bijOucGAjICh7p9RINuwzHZzoBfBOQcg8+uxy3L5ERdzya/Ifge/IK+yi8IKKw+5qR3XT0GSWDaNifDGonUC/bcIK1OBfPrnvmHDpEi+TYw6gT233Mu6k/B0ybQm4tcaeCJgmqZXuomVplLyktln3PJnm27ZI/F5w3yc8kwa5eDB1fbzw9y/0fQ6XQYDAaMRiM+Pj6YTCZMJhOSJOF0OrFarZSVlVFaWorValXnjRRFwW63o9PpCAwMJCwsjLCwMHx9fZFlmaKiInJycsjJyaGgoEAt8eTr60ufpiG0rxdKUWR3TBZ/tmzZwi+//IIkSWqVDjhXBLhhw4aMHDmS+Ph4Bg4cyAPvP8Dc4rkXnO/zHyb+jJV+/ncDXBiYUo60r9KIujWqQsqEq9hF1sosQnqFIBpEUmakUGNYDcwNzRUsvj/j2vw9moU0Y8ENCy65zr59++jduzc//PBDpYnUe/fuVa27bt26MXbsWFJTU5k6daraicDbzb1u3bpq65/yVVOutIokt912G19//TUNGjSge/fufPDBB9SpU4fc3Fz8/f0RRZF58+bx4IMPYrFYSE1NpU6dOuh0OhYvXqx2b9e4sqla4QNY/iAcWALtx0DfV86py/nkJ0FROkRf41EoWYY9c8FZRlmTGzl09AS7du3iu+++44kav3JttCewZfERgTtWOHmiEzzZRY+AwvgVVr4c5nNJl+Tv3TS9/BEBLP+6fORm+f25zhpBOhFyyhSafVx60aLclSFJEj4+Pvj5+REUFERAQAD+/v6YTCa1sHNJSQn5+flkZ2dz5swZT2mzmjXVnxo1alT6d1hYWIWOD4qikJ+fT1pamvqTmppa4XVaWhqFhYWEhYURGBiIIAg4HA5KS0spKSmhtLRULcVmMBhwuVzodDrcbjfh4eEYDAbS09Nxu10E+vqSW1hEk05NkO6R1Hy3vyIal5prVddxeSqkVHp9KFyQ21e4qxD/Fp4uC65iF2mz06h5U01M0aYK+7nYeP7odVV+3ZqGmjzX/Tl6RvesdLs5OTl07NiRV199lZtvvlld7rXuZs6cSXp6OmPHjiU4OJiPPvqIY8eOoSgKoigiSRLR0dFkZ2fToEEDVezOr5pypaAoCn369GHDhg3cdNNNbNq0iT179tCxY0dOnz6NyWQiLCyMe++9lzfffBM/Pz8aNGjA6dOn6d+/P9OmTdP65V1FVL3w/RVkGQ4vB1GPu0F/ft60ia+++oply5Yx7NoWzGpzEEF2kVYsU+9DG4qisOkuC12iwOFWeG6DnSg/gQc7GS6op1nZ9NDvWXi/5xatEHjh9ERJlp/HA8gskXn8Rxs9Y3S8v93B/iwZsx5mD/Ehyk9kzHIrxy7i6hRFUbWWdDodQUFBREdHExsbW0HAygtaeHj4v/60brfbSU9Pv0AQvT8pKSmkpqaqkYdOpxO73a6eL7PJxJcvP0NIgD/rduxiylcLUCwKjd5pdFFRqGzZxUTl9+b4gAvn9bgwwER2yiiycm7usZzFeKntX+qBq7LjOn89g2hgw40bCDBWDLBwOp3069ePDh068OabbwKe3oazZs1iwYIFdO/enVatWrF06VIOHTqk7kOn0xESEkJRURE9evQgLi6OG2644Q9XPfmv4nK5aNOmDQcOHOC1115j7ty5vPDCC7z++uvs27cPSZJo0qQJkZGR7Nu3D5fLxahRo5g/fz7vvPMOt912W1UfgsY/zJUpfL+8jfLzW9jtdp75WWbhCV+aNm1KnTp1qC1l82SNTZhET8f0ZrNcyLKb5iEy34w0kVOm0OcrK7lWKHzKoroWBUHA5VZwy2A4a9w43R4LTBQvtAq8n/kzKIonyV0BdKKAw+VpvosAN8wrY/XxitEoD3Uy8GYfIwYJ1p9yc+MKA6Ghoaob8Xx8fX1xOBzqk6ksy3Tu3Jk+ffrQtWtX2rdv/59zTSmKQk5OTgVB3LdvH+vXr8eMzOQH7sZsMmGzO7j+AU+uVO3Ha+Pb1PeSYlZ+mfdvL5eKohUET4K44lbUwJUKn1HOllZTQB/siVRUZIWCnQUEdgi8YHuKW8GWasOnjs8F26rg8ra6EPWiGjV67sBQ5w8V91mLU+8RYr2gZ9OoTfgaKlY4efjhhzl69CgLFixQOyJkZmbSu3dvdu3axcGDB9UHJb1ej8ViQRAEhgwZwpAhQ/5W1ZT/GqWlpTRq1Ii0tDS++OILkpKS2LlzJyUlJfz0008IgkD79u05efIksizTq1cvgoOD2bBhA0uWLNFSFa5SrsyOpTnHwW1HJ8j0bFkbsWM//P39Pe49Pz+O24OJtCZS2rgbmRM+AUVmxk4HYW+VYDQasds9//TZpQqRfudujJIIOuncTUkv/X7+npfKgl8qWy6dTSz/NdnFixvt1Aww8VumwvEcAUmSsFgs+Pj4YDAYKBGtuGU7TlHCaQnH4cggLS0Nt9tNx44dufHGGzl58iTz588nPz+fkhJPgrnD4cBgMBAcHMyWLVvYsWMHer2e4uJimjdvTu/evenWrRtdunQhNDT0n/52/hSCIKjzhK1bt67wXklREdsWfIHL7eb7zVvVeb8+1j4sW7aMgKEBlVpu3tfl36tMAMvjFTVripWyU2UEXxt8QUCM5wXYUm3YUm2e2ptnRcl61ErRtiJCeoUgBUgYw40gwvEXjuPIcODfwR/JTyL4umC187q7zI3oczbJ3pvz51RARK33iQBnFpxh4gMTefbeZ3n2o2dZlrAMo2SkkbPRBaI3e/Zsli1bRu/evYmNjaV58+aUlJSQnp7OnDlzANQcv1q1ajFixAiGDBnyr1VNqUqys7Np2LAhhYWFrFq1ipiYGB577DE6d+7MTz/9BHiiUg8dOoTRaGTKlCnMmTMHu91OQkICQUFBVXwEGv8WV6bFV5gKS/4Hkh7iPwXfi0STzRsFR1cDnptXl9llbEv1WFWhZoHZcSYGNdRdKvId8ERCelMBvPzenE351xXeB97e4mDSNj2NGjXi0UcfpXnz5tSqVYugoKALt5u4GkqyoNUoZFHPgQMHWLlyJYsXL+bAgQO4XC5q167NgAED6NatGx9//DEJCQkXdELw9/cnPDycrKwsACwWC/n5+URGRtKzZ0+6d+9O165dqV+//n9mDkdRFD7b+ikfTX+fD+6fzv3j72ffvn3odDpcbpenYoxeRHbLnmCTs9bRH3pIKefTlp0y9lQ7OatzKEooIvbpWCyNLJd0kXrLhXm3UbynmOT3kgEQDAIBHT3Va0r2lWA9dS7SNmSgJx9R1InIDlm13rxWJrLn8+VF25HrID4nnl9++YWMjAymT5/Ovffei81mIzk5GVEUKSkp4bXXXmPq1KkEBQXh6+tLSkoKLpcnAVOSJNW6GTVq1GWvmnK5OX78OC1atMDpdLJlyxbat29Pjx49EEWRTZs2ARAaGkppaSmDBw/mtttuY/z48dx33308/fTTF+1hqHF1cGUK3x8lcTXMH6Xe44rsCsFvlVE33MKBsaAXK7q4rE6F3zJc6ESB7DKZ/vX0FRLb3WcjLy8let4IUUnkgvUVReGoqTWNnt6E1WrlpZdeYs6cObz11lvcdtttf8l1unXrVj7++GPWr1/PmTNnMBqNtG3blmHDhpGens7ChQvVcHQvgiAQFRVFaGgoaWlp2O12AgMDKSoqQhRFrr32Wrp160a3bt1o06ZNlVWZX358Oa9sfQWr3Yr+qJ6TM07SrFkzjh49SkFhAY0+aIToI6I4FTIXZBJ6Q2iF3LmLuacVRSHt0zR8W/ki+Uj4NvN0SUCGwp2epPjza2gqioIjz+GptykJFTskyJC7PpfMeZnqZ2KeivG0FQJOvHICe6qn8o1oFqn9QG10gTqMNY1qoIw9zU7h9kJcxS5qDK+BZJFABMWpkLs+lzMLz7B7927atWvH8uXLmTRpEmfOnOHFF19kx44dzJs3j5KSEs+cY7noWEmS6N+/PzfffDP9+/evsqopl5Pt27fTrVs3BEFg7969NGnShBkzZvD666+TkpICeKxei8XCV199xbFjx5gyZQpffvklffv2reLRa1wOrm7hA0jaAl8MRpFdWDGwrOG7dHBuoX7S16ql55I91WGsLrhhVSiRjdrSpk0b7vTfQmTur1Duyb/ILuNnOJv3oE6+eIJRFQX2t3yRyHb9CPE1ImQdhvUvo+QeA0AQdfC/nyCipTq8Xbt2MXbsWGrWrMnMmTPVqvZ/hZycHD755BPmzZtHYmKi6tK67rrraN68Ob/88gsJCQlYrRVz/QwGAw0aNCAkJISTJ09SVFREaGgoNpuNvLw8OnTooFqEXbp0uWw3zy8OfsG7u97F6XLSUNeQ+TfNx2AwkJCQwG233cbpstMEdQui7FgZte6p5amU4lbI/TkXU7SJssQyRL2ILkSHsYbR07ZIFMj5MYesbzyWb1DPICLviLxoesP5EZ3uMjeS+VzXBluKjdIjpWQtzUK2nQs+avh2QwwhBtw2NynTUyjZW7HOqdFoJHBwIMG9ginaXUTap2meecMQvafjhChQdrKM9NnpOLI8NWubN2+OyWQiIyODuLg4Zs2ade6h7GzaiCAI+Pv7M3LkSG6++eb/bNWUf4tly5YRHx+PyWTiyJEjREdHk5aWRoMGDdTrXhRFhgwZwvvvv8+jjz7KqVOnWLx48d/639O4srj6hQ/g2Fo4ugba3Qk1m8PJjfDVCBTFiWIMRIz/FIJjwLcGmPzPfc5eAts+hox9cOxHj7rdugTqdAVrPvgEeVIsds2BrIPQ5nZo1P/C/WceAGse1OnmScU4D6fTydSpU3n77bd58cUXue+++/72fEt+fj7Lly/nyy+/ZOvWrYSHh2O327Hb7XTv3h2z2cyWLVtIS0tTLQQvQUFBNGvWjICAAI4cOcKZM2eIjIzE7XaTnp5O3bp1VYuwa9euxMTE/CvuUavLynM/PceyNcvQ/6znrhF3qZbNgAED+OijjwBPQnejdxqpDWCLEopImZ5C+QTIOo/UwbelL4pLIWtpFjmrc0CAkAEh1BxZ8w+ltpyPoigcmXAEd+GFpXQsjS1E3BJB2aky0j9PRxIlfH19KSwsBFBzxs4PUvJt4Uv0/dFIJglXsYsjDx6p8L43+lUQBAQfAb8WfpSdKEMsFnn88ce5+eab//NVU/4tPvroIx588EECAgI4ceIEwcGe5P727duza9cuwFNebcGCBTRo0IDhw4fTvXt33n///f9c0JfGv0v1EL7KOHPII151ulw8d7A8LgeggO7fy+VJTExk3LhxuN1uPv30U5o2bfqPbLegoIDvvvuOb775ho0bN9KwYUMCAgJIT08nMzOTNm3aUFxcTGJiohogU57Y2FiaNWuGxWJh3759pKSkEB0djSRJpKenYzQaVRHs1q0brVq1qpD391eRZZnFixdz6623qkEwX3zxBddddx2//PILPXv2VNf1a+JH7Sdre1x9DpnweY3IS8piX9JmAGreUpPgaz03wtRPUyneU0y9l+qpvfQulqpwqTxORVbI/zUfe5qd3DW5F4zfZDLx9NNP8/HHH5OdnU1QUBCRkZHs37/fM2Y/PyRJorCw8Nw+dQK1H6qNT6wPGfMyKNxaeNHz0+CNBuiCdIiIrBm5hqjgqL95xq9MFMVTRuytt94iIiKCo0ePYrFYKC09ybJlX/PAA29SUFDGtddey/fff88PP/zAfffdx+TJkxkzZkxVD1+jCqi+wvcfRZZlZs6cyfPPP89DDz3ExIkT/9E5tsLCQlasWME333zDTz/9RKdOnWjUqBEOh4MdO3Zw/Phx6tWrR3Z2NllZWaoLzYter6dVq1Y0b94cSZLYuXMnJ06coE6dOoT5GTidmUd2Ti6dOnVShfCaa67Bz8/vD4/x9OnTfP7553z++ecEBgZy7NgxkpKSGDFiBNdeey2vvvoq7777Lo888oj6GbPZTMRTERhqGPBRLIze/TyiS8fMNc9xNG03SBDYKRDBKGA9aUWQBGKejEEynbOsLxW9W5kb1JnnRB/oKZitOD01OmNOxJCbk8ukSZO48847adiwIcnJyXz44YeMGTMGvV5PgwYN2LNnD4BaAScvL+8Cy/tiDBgwgB07dhDxVoSnS4RLYPHwxTQMaviHz/HVgtvt5pZbbmHRokU0aNCAAwcOoNfrsVrTSU5egNvtYs+e09hs7bj99tuZOHEiS5YsYcmSJbRt27aqh69RRWjC9x8lJSWFe++9l9OnT/PZZ5/RsWPHf3wfRUVFrFy5km+++YYNGzbQtWtXBgwYQHBwMLt37+bAtvUUph0l1RVEXl4+ZWVlF2zD39+fnl068H7700SLWZwqMdDpMyuRtesSEBBAYWEhJ06coGHDhhWswvOTom02G8uWLeOzzz5j9+7djB49mrFjxxITE0OdOnUoLCwkKyuLjh078uabb/LNN9/w7bffVhALQS/gE+vDPa3fIDawGQ6Xja83TmH3SU8UX2CXQKLGeawit9WNaBQ9QSqVRIJe8t9Cgfyt+RhDjZjrm9UWRaIismzoMkb0HsGzzz5Ls2bNaNOmDTabzZOXaDZz/fXXY7PZ8Pf3p7i4GKfTBSiEh4dz5syZP/S9SZLk6bvX2EmtG2uRuz2XpM+S/hEr+0qirKyMAQMG8Msvv9C+fXu2bdumRmN+8MGz9Ojhi9lsRBD8sVhuYNSoUfj4+DB37lzVDapRPdGE7z+MoigsWLCARx55hJtvvplXXnkFi8Xyr+yruLiY77//nm+++YZ169Yx8rrWTG9zCEkUOR3Wi1mnY9i4cSO7d+/GaDSqJccA5sf7cFMzT19DmwueOtwMR3grysrKOHr0KPv376devXpqwMzp40d4q5dA46hA1hr6sycpj7Vr19K6dWvGjh3L0KFD1TmX4uJiIiIiVBfsnj17uP7663G73dhstgsCdQBqBtZheOd7yMhPYs2+rykr83SCiH0uFnO9czVaUcBZ5EQfoP/dyi6yU/YkmAsCiluh9GgptlQbklkisEsgAIIiEDg/kBGDRvDpp5+yd+9eNm3aRO/evfHz8+Phhx9m9OjRXH/99WRmZtIwoi1395+E3WHl7WUPklWY+oe/L7PZjMvlYty4cXzyySd88MEHjB8//i9991ciOTk5XHvttRw5coR+/fqxerUnbcnlctG+fXv27dvHG2/cyq23DiY1NYD4+DGMGzeOF154QUtV0NCE70ogJyeHCRMmsGXLFmbNmkWfPn3+1f2VlJRwaN6ztEz5EpMkk1Qk8Xz2IK655hpatWpFaWkpmzdvZt26dezcuZM1NxvoUUdEwFNnNOa9EsqcqEWtY2Ji6Nq8DpIosCcpj57mo7zeU0IvKqw7JTNqpSdgo7xF2LFjRywWC2VlZYSEhFQQuA8++IBHHnkEi8VCUVHRHz6u8OHhhA0O87w4rzZdZW7N8pZfyeESfJucTRY/a2QqLoXChEICu56r2JI/I5/MhEwUxdPfTRRFSksvbMEE8OANU2kU1Qa37Gb1ri/54bev0ev1uN3uP+z21Ov1tG7dmpycHE6ePPmHz8WVzKlTp+jatSuZmZncfPPNfP311wAcPXqU1q1bY7VaueGGG1i+fDkffvghr732Gp9//jkDBw6s4pFr/FeoXr6RK5TQ0FC+/vprVq9ezdixY+nduzdvv/32v1ZZwtfXl463vgizt6Dkn0bs8zQ9M/zZtm0bM2bM4NSpU7Rp04auXbvywAMPYKOQ40dncCwll9HzMrG5RUBWk6cHhSTzbitP+sAqs8JXexy4ZRMgcKZUobCwEJPJxOnTpyktLWXBggWcOnWK5s2b06lTJ5xOJxkZGURERKjja9KkCbktcgmpE0Lmwkysp6yIPiKBXQOxZ9gpPXih2LgKXCguBVEv4ip2IflJ50qLlX/+K1eI2lsmzLexp0Sa7JJxlbjQ+Xr+dWxJNpSOCuhBtspk7s9URasya7Q8u46vp26Npigo1GtVE90+TzFxSZIq1F+9GMHBwQQGBrJ3714cDgcLFy7kpptu+iNf8RXLb7/9Rq9evSgqKuLBBx/kvffeAzwPQw899BCCIPDII4/wyiuvcOutt3L48GG2bt16VSfra/x5NIvvCqO4uJinn36apUuX8sEHHxAfH3/Zx1BUVERCQgLbtm1Tf4xGI9dccw3t27cnMDCQlJQUvvvuOw4dOsT+8T40DfcEkciKQq8vyojwEwi3iCw46mk8W1ZW5qnI4nLh4+ODw+EgKiqKsLAwEhIS8Pf3JyQkhO7du3PixAmaDGzC5pDNSCYJR5aDo08eJeaJGMwNzKDAqSmnsJ6oKDy6QB11n6+LPkBPxsIMasTXQDR63F6ObIenKwMCGfMzqDmqJq4SF+Z6Zk/5MG+RVdFj6ZUdLaNoVxF5P+UB4B/jT3FaMYrjj/87RUdHYy9RMBglUjNPM2LECFatWqXOpf7uXCMQEBCAr68vBQUFOJ1O+vbtywsvvECHDh3+8DiuFH788UeGDRumFn944YUXcLvd9OvXj/Xr16PX65k0aRLDhw8nPj6e9u3b8/HHH+Pj4/P7G9eoVmjCd4WyefNmxo0bR5MmTfjoo49Ua6gqUBSFU6dOVRDCAwcO0KRJEzp27MigGpkMUjYA4JQ9wrc5pWK0qCAIiKKI2+3GaDTicDhQFEXNW/O6O6Ojozl27BiGaAN1n6kLIlhPWzn16inqv14fU6QJ2SaT+kkqJbtLKrWaRJNI+JBwLC0t+ET6qHUITn9wmuLfiiusG3RdECG9QsjdkItvM1/8WvuBDHnL8shclXnBtv8ItWvXZtWqVfz88888/PDDtG3blsTERIqLi+nQoQOpqamkp6f/ruiBJ9Bl9OjR/Pzzz2RlZfH000/z6aef0qJFC1544QWuueaavzTG/xpffvkl9957L1arlQ8++ID777+f48eP07FjR/Lz8/H19eX111+nVq1ajB8/nldffZX//e9/1TKfUeMPoGhcsVitVuXZZ59VwsLClE8++USRZbmqh6RitVqVLVu2KNOmTVNuvPFGpX+rSOXLeH9l6q1tlfHjxyvx8fFKZGSkgseOqvRHEARFFMWLvm9palFC+oUokkVSAMVUx6TEPhOrRNwaoSBcfLs1R9VUmn7SVGn2eTOl8/QeSsvZrZSB025UOozqccnxiEZRCR8eroQMCFGQLr7exX5CQ0MVURSV+vXrKydOnFAURVEmTZqkhIWFKU2aNFH8/PwUvV6vREREKB07dlQMBsMf3m7jxo0Vo9GojBs3TrHZbMr06dOV2rVrK3379lV+/fXXKr4a/jqyLCuvv/66YrFYFFEUlblz5yqKoiizZs1SRFFUJElSQkJClI8//lh56qmnlNq1ays7duyo4lFr/NfRhO8qYO/evUr79u2VXr16KcePH6/q4VyUtLQ0ZenSpcpTTz2l9OjRQ/H19VUaN26sDB06VOnfv79Sq1YtRRCEPy0o5/+YapsUv1Z+FxW/GjfWUJp+0lQZ9NYo5d171ihvPPiN8v74tUqPjsMUnfTHxObP/EiSR5hfeeUVJSkpSfHz81P8/f2VJ554Qjl+/Lji5+enTJ48WQkICFAsFotiMpkUX19fpW/fvorFYvlD+3jppZcUg8GgWCwWJTU1VVEURbHb7cqsWbOUmJgYpVevXsrPP/9cxVfAn8Plcin33Xef4u/vr0iSpKxatUpxuVzKoEGDFEDx9/dXwsLClPfee0/p1auXcv311yvZ2dlVPWyNKwDN1XmV4HK5eO+993jjjTeYOHEiEyZM+M/ndblcLg4cOKC6R7dv305KSgrNmjVDp9Nx4sQJsrOz/3CEI4C5oZmYx2I8EZa/5JM595w7MjI4lnF9X8LusrFYmMZgy3jqGVpWmEtzyU6e+XIEVkflkZh/aAxm8wXzdJIksXv3blq0aMGaNWsYM2YM1113HevWrSMkJIRnnnmGdu3aMWrUKI4cOYJOp8NgMNCyZUsSEhIqzaEsT2BgIOHh4RQXFzNq1CimTZumvud0Ovn666957bXXqFWrFi+++CI9e/b8T7sBrVYro0aNYtOmTZSWlvLzzz8TFhZGly5dyMvLo1GjRuTm5nLffffx6aefcvvtt/Pyyy9fda2VNP4dtISWqwSdTsdjjz3G9u3bWbVqFZ07d2bfvn1VPaxLotPpaN26Nffccw9z5szh8OHDpKSkMGnSJPr27fuXOkOYok0ggGTUERDjiXoN9vejUZ1o4jvfR5h/FJFBsTRJ6srBPTuQFblC+oJO1FM/otVfOh5vlK0gCEyZMkV97RPpQ8wLMQxfOpwNCRvo168fI0eOxG63s2rVKmRZ5t577yU5OZmdO3fy+OOPY7fb1bZDISEhAJfMPysoKGDs2LFkZmYye/ZscnJy1Pf0ej133XUXR44cYcyYMYwfP55rr72WtWvX/qF5xMtNbm4uvXr1YtOmTdhsNn777TcOHDhA48aNKSwsZPjw4eTk5BAXF8eHH37Ihx9+yKuvvqqJnsYfRrP4rkIURWH27NlMnDiRe+65h+eee07tyn6lUFpaynXXXUdCQsKf+pxoFmnyQAtuKnuSQEc4SVl7GDLA0x4oLyeA1NM1URSZYmsBv534idCAKI6l7ePa5nGE+NXE4bKz6Nf3OJL6G4VlOb+zN6hZsyZt2rThhx9+UINxGjduzKFDh4iJiaFPnz6sZjV+nfxAgdx1uTTLaqZa5Y8//jhDhw4lMjKSiIgIGjVqxNtvv01JSQl9+vShrKwMQRDw8fHBz8+P/PzKK+iAR3BDQ0Px8/Nj9OjRvPrqq5Wu53K5WLhwIa+++ipBQUG88MIL9OvX7z9hASYlJdG3b1+ys7Nxu93s2bOHhx9+mO+//x6TycSjjz7KzJkzadGiBTk5OSxdupT69etX9bA1rjA04buKSU9P54EHHuDw4cN8+umndO3ataqH9IfYtHEjq+Z8gp/ZzHsLFpOdX1DpejUD61Avojn7krZQbM0HPO7Mx4Z9iEEynr2RK7Rom4gkKdjteg7trXfR/SqKTImtCKPehEt28dLcW7A6K3d5dujQgZSUFOx2O8XFxTzwwAPcd9993HHHHWzdurXCug1HN0R/nR5FUUj/Kp2CXwuIiIggICCA1NRUtm/fzrPPPsugQYMoLi7m9ddf56abbmLixIl07NiRjIwM6tSpg91ux2w2U1BQQF5eXqXj6tu3Lxs3bsRsNpOUlERAQMBFj9ftdrN48WK1ItALL7zAwIEDq0wA9+zZw8CBAyktLcVgMLBy5UqGDBlCfn4+fn5+TJo0ieeee47AwEC6du3KzJkzMZvNVTJWjSsbTfiqAUuWLOHBBx8kPj6e119//U8VjL6cuFwuJkyYQFbiQe4ZPgSDXoeiwKbthUxd8B4Fpdnqur6mQF6++WsEQaC4rIAX599C69ju9Go5ktphDdFJ+rMlxxQaNTuF0eQk+VRN8nMDLtmh3bvM5XYiKzJ2ZxnTlj1MdlFahfUMBgMOh4PIyEhuuOEG9u/fz86dOxEEgWHDhhEZGcn333/PiRMn0Ov1+DTxoUWzFvy27DdKS0tRFIWBAwdy4sQJTp48yZAhQ8jOzmbjxo3k5uby8ssv8/XXX2Oz2Rg5ciRfffUVfn5+NG7cmIyMDIqKitQWR+djMpmoWbMmd999N08//fTvnndZllm6dCmTJk3CYDDwwgsvMHjw4MsqgOvWreOmm27CbrcTFBTEk08+ySOPPIK/vz+1a9dm4sSJjB8/HkEQeO2117jvvvv+ExaqxpWJJnzVhLy8PB5//HHWr1/PjBkzGDBgQFUPqQLHjh2jZ8+epKen079LJ568bRR6naf+p8MhkbCtBvml2ZTYirA7yvC1GGlapxl2mw8ut4vJS+7m6RGfIArn5nku2k6okmVeFEVBVmSsjhJ8TQEVyoldClEU8ff35+mnn2bUqFHUrl0bgOPHj/Pss8+ybNkyXC4XoigSERGh9kFs0aIFvr6+WK1W9uzZw+jRo3n66adp3rw53bt3Jy8vD4fDwcCBA5k+fTqKotC3b1+2bdtGSUkJTqfzgrGYTCYMBgM6nY6UlJQ/bBXJsqx2dwd4/vnnGTp06L9e2/Lrr7/m4YcfpqysjOjoaBo2bMiqVauoUaMG1113HSNHjuTWW2/FYrHw3XffXTW5iRpVhyZ81Yx169Zx991306VLF959911CQ0OrdDyKovDKK6/w+quT6dFsKGX2Yvq2uZlG9UUiauWgKAKF+X6cPnmuS7pO76BJiyQEQSEv18Irn85BEnXc3mviuaLSiowoiJVaBZ4oSzeh4QU47Aby8/wuEEW37MIte5LsP1r1FGn5x7DZbH/4uARBoHbt2txwww3cfvvtNGvWjE8//ZTJkyeTmZnpaSQrCMiyjI+PDxaLRW3+u3PnToKDgykqKuLo0aNs2rSJRx99FEmSOHLkCC6XS016L18svDxNmjQhJyeHZ555hgkTJvzp72TFihVMmjQJh8PB888/T3x8/D8ugIqiMGXKFN599101UjMrK4vCwkIsFgtPPPEEkZGRjB07lhYtWrB69WrCw8P/0TFoVE+0qM5qRp8+fdi/fz/h4eE0b96c+fPnV1lk34EDB3j9wXvoFRnMJ0+/zKAOd3JT9wkE+YaTfSaMw/vqczyxFqdPRlQQMIvFjiAoSJKCr38Rv53ciEFfsSyVze6Zmyt/bOWjN+vUTadmVDbRsen4B5So9TpVcdXZOeNYzJqDr3EiYz82m41Ro0Zx5swZ/ve//2EwGFTx8ozJQnR0NL6+vuq+Tp8+zUcffUSnTp3w9fXl8ccfJzQ0lKeeeop27dqp47FareTk5LB7925ycnLYu3cvaWlp+Pj40KJFC44ePcovv/zCfffdpzav3bNnDzqd7qIVew4fPozRaOTVV1/Fbrf/qe9FEATi4uJISEjgjTfeYOrUqbRo0YIFCxZUKrJ/BbfbzUMPPcTMmTPJycmhXr16HDp0CKPRiNlsZs6cOQDceeedjBo1iu3bt2uip/GPoQlfNcRisTBt2jS+++47Xn/9dQYPHkxKSsq/vt+y/FzspSXk5OQwYsQIrunYge6tmnuEKMoHo1GuYHk5HDrSMktxup2qMDlddkqKfbHbDMgyJOxLZVT3RwjyDauwL7PJM495sXkgnd6N9y1J51ZFzC27Sck+RljtvQzs3ponbounYW1P78AFCxYQFRVFSUkJo0cO49lrjTx7rZHQQD+aNWtGTk4ONpuNIUOGcOrUKXbu3Mkdd9xBREQEkiSpeYtvvvkmO3fuvMDVWlpcRFd2svP1Adw8fBCHDx9m9uzZ/PTTT9SvX59jx46xceNG7r77btxuN4WFhbhcLtWtej4WnQ673a6KyJ9FEAQGDRrEtm3bmDZtGu+//z7Nmzdn7ty5agHyv4LVauXGG29k48aNnDp1ivDwcI4cOULbtm0xGAz88ssvLF++nGeeeYYpU6bw5Zdf/udzUjWuLDRXZzXH4XAwefJkPvjgAyZNmsT48eP/lTmdlL27SPktAafLyd6jx4kKC+XdeYu4K24QdWrWILewiNTj7ZBEPUVleeSVZFFQksVXG6fgll3UDIrB7XZSP7IVN1/7KMEhBUTHeBq3JidFkJVlQifqEEXpgvm8yjCaHETVPoPNqiMtORxR1CErMkfSd/LJmheZ/+pzhAcHoSjwwJR30PsHsmfPHjWZftJ1Bh7vbAQBpu/R8cw6T9pBw4YNOX36NIWFhYSHh9O3b1+aNm2q7tdms7Fjxw527NhBQUFBheT88e30TOtnQifCptxQuk07pPYlTEpK4oMPPmDOnDn07t2buLg4HnroIfLz82nZsiUnTpxQ2x+JwOzoaNr7mPnV7eb5okLS09P/tngoisL69et5+eWXOXPmDM8++yy33HLLn9puXl4eQ4YMweFwsGPHDnX+sWnTpgQGBjJnzhxGjx7N1q1bWbp0KYMHD/5bY9bQqAxN+DQAOHToEOPGjUOn0/HJJ5/QqFGjf3T72xd+haukCJfbjSwrGPQ6cgoKGfHUC8RE1iQtOxeL0cyzd91J3ehQ5qxYzbcbf6F+dBQ927bmRFo6G3ftoVeLEQy9Zjy166YTHOLpxZebHUhKUk3gwoCW8svO/9v7OqsglVD/CDLyT/PuyocZO24MLzz5BLmJB/GrGckDz7/E2rVrWbx4MTfddBNFRUXMGB7GnU08c37vb3fw1HoHgiAgSZLaIy85OZm0tDSMRiOtW7emW7du6M4G7JRHEASSkpKIzviBFzo70Ymw5LCLm5dYEUWRRx55hKlTpwKe7hxz5szhvffeU+cBExMTCQ8Pp7CwELvdTi29nhUxsRhFEVlR6HzqJO/OmMGYMWP+ke9SURQ2btzIpEmTSElJ4ZlnnuG2225Dr9df8nPJycn079+f8PBwfv75ZwRBoHHjxtjtduLi4rjvvvvo3bs3OTk5/PLLL7T7f3vnHR5F1fbhe2a2pneSkIRAEpr0JohKERSkikp5FQQ7KIqAYKFJF2mCiA0FQUQRpYr0pvSOQGihpJLes21mvj82WQgJfFgQlLmva0myc2bmnNllfvOc85SGDf+W/mpoXIsmfBouZFlmzpw5jB07lsGDB/Pmm2/+vzez/4/kk8dIjD3BnK8W0OfRh7FYbej1OlDh6Nk4hsycA4C/tzeLx4/AzWRyTjnKCk+PGs+CMW+j1+lQVJWzcZB4KZBAX2/c3GyER6agIhB3OhyrxRmgf62olSeCV7dTVJkf937EobM7MLoZyMtzimmnTp14++23qV+/Pna7HT8/PywWC6tXryY1NZVXX+zLDy/Xpm2bNhwO7MqQt0ezfft21xSgKIqYzWYGDBhAbm4uixYtwmq18sgjjzBr1qzy68PJdtj2PhRkMPukD68NH1NqsyRJDBw4kOnTp6MoCmvWrGHmzJns3buXwsJCVzknHA5+iIykkt7AUUsRz8THYzKZyM/P/9uzm2zfvp2xY8dy7tw53nnnHZ555plys+0cOXKEjh07EhMTw5YtWxAEgccff5xt27bx/vvvExwcTPfu3dHr9ezZs4eYmJi/tZ8aGlejCZ9GGS5evMhLL71ESkoK8+bN+9NP3nlplzm68gcAbHYHiqKgorLz6O/UqxqN3eFg7c69xF9OBVVl2DP/w2QwOB1DklOY+e0PfPB6f/TFU2m5OWZSkgKIqpqAIEDChQoYzVa8fQpITgwgO9MLKN+qgxKxU1Fxuu4rqsy235ezM+4nhgwZwscff8zYsWP55ZdfWLt2LZIkUaeOM5dncnIyp06dYty4cbz77rts2LCBRx99lBYtWrB+/XpXSaUNGzYwefJkduzYUWoas3LlyjRo0IA9e/aQmJhItWrVGD9+/A3rKWZlZfHaa6+xceNGV1hDCZIk0b17d7766itiY2N54YUX2LdvHz4+PmRnZ6MDQvR6Eu32koLxmEwmNm/eTLNmzf7U53kjfvvtN8aOHUtsbCxvv/02/fr1c2UL2rRpE7169SI6Oppdu3ZhMBjo27cvq1at4vvvv2fTpk1Mnz4dd3d3du7cSWRk5N/ePw2Nq9GET6NcVFVl0aJFDB06lL59+zJmzJg/XNBzz9JvsOc4M6rY7HZEUUQSRdKycgj09S52JlFwFHsKGoqnAdft2suMb5dSs+J9vPtcXzw8ipBlgQvnAvH1LyCkYjaCAPl5ZtzcLIiSiqIIHNnvnJ4tb32v5D1ZdiCrDvad2URaXjy9B3UiNzeHr776isTERPLy8li7di2qqvLcc8+RmJiIwWAgIiLC5dl45MgRateuzeHDh2nWrBkxMTEcOHCglHWclZXFRx99xPTp08nJyXEJoyRJmM1mTCYTGRkZeHp68uKLLzJ+/PjrppVbtmwZr7zyCs888wzZ2dl88cUXpURVkiQeeughOnTowBtvvAFww8Te7du3Z+7cuVSqVOkPfZ43w+7duxk3bhxHjx5l+PDhhIYayco6wPbt5/n66/VERkbSqFEjzp8/z1dffcVbb73F8ePHkSSJrVu3Eh4e/rf3SUPjWjSvTo1yEQSB3r17c+zYMS5evEidOnXYunXrTe2beuki30ybjCXTmetSVhTW79lHUmo6F1Mu8+PWbS4LUBQEdKKIWFyIFqB+9arY7Q4aRj9EwoWKxP4eRXqaO6sPfMHp8wXIDglZFkhN8UUFZFnAZtUB5U9rlsTjlbxv0JkIC4hmz9lfmDfvC2RZZurUqc60bk1asPHj8+xZkIlB9qZt27Yuyy8pKQm9Xs+9995LRkYG9erVIzY2lkuXLhEVFUVubq7rGvj6+jJy5EiysrL45ptvqFChAqIoIoqi0zvVbkeSJPLy8pg2bRpms5nGjRtz7NixMtfz8ccf5/Dhw5w8eZK9e/dy+PBhNmzYQO3atZ3jk2XWr1/P66+/7rRkFeW6yb2NgsAva9dSvXp1hg0bdt3sL3+Wpk2bsmbNGpYtW8Znn31CrVq5PPhgDCNGPEzfvj0ICAhAp9Mxa9YsOnfuTEZGBiaTiV9//VUTPY1/DE34NG5IUFAQS5YsYdq0afTu3ZuXXnrpujdLWZb58ovPOPnLCip5e6DT6VCBC0nJtG3SmCB/X2x2O53uv48lGzbx1kefsevYcbYePMLpS/Gu9TgfDw8CfH3YeuxHZMWOICqkFZwmO0cg9mIcRw5W5uiBquRkeXH6RGUSLlZg668yVseVeLXS4qfgkO0UWvOQFQc2h4Wj538jLy+P7du3M2jQIFq3bk2nTp3Q5wUS6BWKu8Gbrs1e4Ndff+XRRx8lOTmZhIQEJk6ciN1uJyQkhOHDh6PT6bhw4QKyLBMZGUliYmKZ69KrVy8SEhL49ttvXTf+3NxcvLy86NixIw0bNkQURQ4cOECdOnUwm8089dRTpbxIg4ODWbFiBa+99hqtW7fm4MGDHDp0iLS0NJ599tky1vjV06IlDPDzZ39MVX6uXAWdzcbs2bOJiori448//kvhCeV9D7755ht0OhFBuPIAcvr0ETp16kTbtm3p3LkzdevWpbCwkO3bt183HlFD41agTXVq3DQ5OTkMHz6c1atXM2fOHLp06eLa9ssvvzB48GCqBPrzVu8eLstLVhSkYkuuJFOJKIooikJ6dg4b9uxn+6GjnEtI5IWuHXms1QPsOHSU0Z99BYAk6ljw9QIMl2JIistEEnU4FDs5BRnoJQNebn4AKIqMIIoICNhlGzpR77rhWmyFmI3uyIqDjUeWcuDsJpIyzwPOdS+r1YpOp8Nut1MjvDEvtB2DisraA19zKGET/v7+ZGZmYjQasVgsVKtWjZ07d9Lh4S4cO3aMVg8/wGuvvUbv3r05f/48e/fupVatWuVeQ5vNxty5cxk3bhy+vr5cvHgRSZJ44okneOCBB1i9ejVr1651CZHBYKBjx4506NCBtm3bEh4ezoULF+jbty8Oh4MFCxYQFRWFqqrMnz+fCRMmcO7cOYxGoytw3U0Q8JIkfoysjI8kUaAoDElKZHtx+ENERARms5mpU6fSoUOHv5QD02Kx0Lt3b+Lj4zl16hRvvtmObt0as337Sb788hhHjx7F3d2dtm3bEhsby4YNG1xllzQ0/ik04dP4w2zbto3nn3+eBg0a8PLLLzNh7FgeqVuDWlUqYzLoEUVnqrCs3Dz8vLwQRacIFhQVIYoSoiBgNOhd4mi12UjPyeWpkeOQ5StrU8888wyffvopRqORL4Zsx1rgcAWyq6iU3J5F0empqKoKgiBSZCtAEnUYdEbsso1LqbFEVqiJrDj4aM1wTH4KJ06cAJzB/IWFhbi5uVFQUIDZbCaqYg2sRQ7OJF6/nmGdyOb0e+hd9AYDeX4n+XDeBOrVq0dSUhInTpxgw4YNtGzZ8rr7Z2VlMWHCBObPn0/t2rXZv38/VquVOnXqMHDgQMLCwhg5ciR79uxBURSMRiOiKBIaGkq7du1o3bo1p06dYvr06YwfP54XX3zxKsvqNIMHD2bdunUEIfBjZCRGQeCUxUI1k4l8RaHzhfNkXZWFxWQyERAQQNWqVZk2bRr16tX7w9+LrKwsunbtiiRJ/Pbbb1SrVo1WrVqxZs0aPvnkE9555x28vb05d+6cKwxi6NChd2zSdI3/Lprwafwh8tPTsBUVkF5k4+GHH+bixYv069SOwW0iEQWBLHNNbA4H2w4eobDIQucWzV0C55BlVm7/jWB/P+6rU6tUuIHd4eCJ4aPJKJ5G3bp1Ky1atHCd98KxdL6dsRl3nS+i4LQgS7w0EQTyirI5dG4bFf2rsPbA1xj1bnRo9AzpucnUCG+MXtJzIf0k0396Hb1ejyzLZRxAKlWqRJMmTdi/fz9Go5GBAwfSsGFDNmzYwJo1azh27JgrSPyZ1m/TOKYNAL+eWMXqQ1/g7+9Pbm4udrudCp6VGdLjA6rUrEibfjWRdOWvKsTFxfHOO+/w66+/8uCDD/LLL7+g1+td2U369u3LiRMnGD16tCvHp4+PD35+fiQnJxMTE0Nqairh4eEsWbKEypUru45tt9v55rnnqbN7N2ZR5JLNxnMJ8WQ4HFiu899eFEV0Oh3NmjXj448/LhV8fyPi4+Np164dFStWZNOmTXTo0AGLxeIqsvvKK68wZMgQYmNjXYL94YcfsmHDBl577TUGDhx4wxJKGhp/J5rwadw0OcmJnFi3iiKLhbW/7SYmIpwqFUMoPLGURwPOIAhw0eshEj0fQODadTYnDlnmxy3b6d6mlbPygt2OIAhs2neA8fMWEhUVxYEDB8rcBMeNG8eY0WP48IX1LsF0BibAxdRYpi0fWKa/bkZP6kQ258nmA9FJOi6kn2DGT2/QunVrunbtysyZM4mLiwOcVcpL0pYFBAS4KpgrikKDBg3o1asXDz74IP7+/uzatYtNq3ZSw/QIiqIwZ+0wzqecLHXuUT0WEOQThkOxE93STLsezW8YQ7d7926GDBlCfn4+zZs3Z+nSpVQNDia1sBBBkujbty8PPPAAEyZMYMOGDUiShJubG4IgEB4eTkJCAtnZ2dSrV48+ffrQtm1batasiSMtjdhHO0BeHpMuX+bbnOw/9Jn7+fnRu3dvunXrRtOmTct1mjl69CgdOnSgSpUq7Nixg5dffpmNGzfSrl07AgMDmTt3LgsXLmTBggXEx8ezatUqV07TU6dOMWHCBNauXcurr77K66+/jo+Pzx/qo4bGH0UTPo2bJvnEUc7v3Ykqy2QVFOLj7o6ASkjKUipZDyGIApfdG3LO97FyvStLOHL6HBabjciQCoz/ciGHTp0BYNSoUbz33nul2iacymLX5gM8M+gxQvwq80bnGWXi9E7G72PRb5PIz893WXH1q7SgT+u3UBSFvWfXITtkdpxaTk5BBkVFRRw4cIBu3boRH+90qjEYDOzatYuZM2eydOlSAgMDSU1NJTAwEJvNRkZGBmazGavVSnR0NHXq1CEmOoapU6fy3tj3OHToEBs3biQ/Px9RFOn9wDtUrVgfQYDZa4aSlh9Px44d6dixI4888ki5VTFUVeXHH39k+PDhvOXjS7OCApIcDmZXjsTNz4/169fTpEkTnn76aQ4dOsSXX35Jbm4ulStXxt/fn6NHj6KqKh4eHi6BatOmDS0eeIBXX3rpulbejShZjzWZTKiqygMPPOByUKlevTpbt27lySefJCwsjN9//53Bgwczf/58Ro0axfr168nIyOCbb75h+PDhZGVlsXz58nLLJJ09e5aJEyeycuVKBgwYwKBBg/Dz8/vD/dXQuBk04dO4aRxWCyc2/IytIJ/IJs05s2MTikMGyUrA8ZlU8PbkTEBPbDqfMhlTSnAWeZXpPPgdcguuVDc/ePAg9evXL9U27VIeyz44gKXIwqW0U+w9s4GeD7xRaopUUWSmrR1AgDGcfEsOpxIPAvDKo+9TI7wRqqrw25mVbPp9Cfn5+YSEhPDmm28yatQo5syZw9GjR5kwYQKqqlK1alVOnTrF6dOnefrpp/Hz82PgwIHExcXx66+/smXLFtLT0zGbzcTExBASEsKOHTswmUzY7Xbuuece11Rj6uV07OkmUjIvEpdywlU3z2w243A4iImJoWfPnnTs2JF69eqVejiw2Wycrt8ASZaxAPNCgvnm8GG6dOlCgwYNWLVqFQcPHqRHjx5ERkYyf/58YmNjCQ8P5+GHH2bnzp3Exsa6KnDYbDa2b9/+hz9vPeApSWQWrwWKoogkSfj4+GC3OxOHFxUV4eHhQWFhIc8//zzLli1j0qRJjB8/nvbt2zNx4kT69OmD1Wpl8YQJFK5cRdGxY6iqgu/jj+PTvTviVZZwXFwckyZN4scff+Tll1/mjTfeuO2lszT+e2jCp/GHsdvtbN68ma8+/4zTx3/n6Omz9Hi4Nf0f71JuXkxVVV2WgyzLnEtM5oUJH6CqKkFBQVy4cKHc4PjjOxLZtvgUqgoZeSl8vXUigzrORBBEFEUmz57OT799TmRgTZpVbw8ILNg8kaMXfqPDAz3pUPtFLNYiqrY38vKgviQkJBAeHo6vr69zKrFqVWRZJiQkhOzsbOx2OwMGDGDOnDnY7XbGjRvHZ599xieffELXrl0BZ5LlWbNmsWDBAlJTU11lepo0aUJ4eDhms5mCggLi4uI4fvw4np6e+Pv7k5OTQ0JCAjqdDoPBQGFhIQA6nQ69Xk+LFi3o06cPHTt2xNPTk6SRI8n5aTl2L0/mREfzw5o1mEwmsrKy6NatG6+99hrr1q1j/vz5mM1mOnXqxIEDB9iyZQtGo5FWrVqxb98+KlasiKIoHD58+KY+W70gMCwwkBCdjtpmN3wkiW+zspicllqqXUkF+qtLMxmNRpo2bcrBgweZOXMmPXv25IknnkCv07Ho008536o1oiyXOxsQNu8LJKMRc8OGrtylkydPZunSpTz//PMMGTJEK0uk8behCZ/GdbHk5VKYlYlPaBgORWHjxo3MnTuX9evXu574wXnzer3nEzze+kFXnk1JEl0OLUs3bqVH21Zk5OQy8pN5xF68hCwrPPXUUyxcuPC67vMrZx3i0olMVEXlVPpu/vf6Ixz9oQCHXcZqL+Trze9z7OIuBrSfRPWwhjgUO6v3fsmZ7D2cOXOGD2fM5rfffmX5yp8IDQ0lOTmZZs2asXHjxlLTbevWraNDhw7OlGqqyvLly12hGjt37qR37960bt2aGTNmuNamAPbu3cvgwYPZs2cP7dq1o3LlysTFxbFv3z4EQaBRo0ZER0fj6emJzWYjNjaWTZs2ubxHbTYber0eRVFccXeCIFChQgUeeeQRXniyO83atkE0GLDb7Wzfvp1FixaxdOlSLBYLjRs3ZuLEiYiiyPz58/npp5+4//77MZvNbN68maysLIKCgpAkidDQUPbv31/mGpsEgdomM6esFhqZzTzr5089s9nlMVsiUoeLipiTkcG+wgLsQIAkMSO0InpBYEhyEpnF4SCiKBIQEOAMTNfred3Xj84mE+biz/h6hYEBVEHAp2tXQidNdLWLj49n8uTJfPvttzz77LMMHTqU4ODgP/At1tAoiyZ8GmVQFYXUs6eI27kdWZHJyMlj8PTZXExOQVGUUpYcOKfv/D09+GLkMEwGA+sPHaNZtWgKi4p4Y8YcktLScTOZsFitKMX7LF68mF69et2wH9u+PUXszmQURaFNv3vISy9i14o4HA47iqKiInMobjvVwxrgYfLhYmos3++dRuyZExQWFlKzZk127tzJ3r17eeaZZ1AUhdOnT5ebALlFixYcPnzYlX3lzJkzREdHA86KCK+//jo7duxg4cKFNG3a1LVfUlIStWrV4uWXX+bzzz+nWbNmvP7660RHR7Nv3z7X68CBA/j5+dG4cWOMRiOrVq2iQYMG+Pn5cfjwYS5evIjD4XBlr7naUq5SpQodOnSgb9++1K1bF1VVWb16NWPGjOHIkSN4e3vz9NNP89hjjxEXF8eCBQuIjY2lWbNmnDhxgrNnz173Gv9UKZIwgwEjIF0lTtda7SU/UxwO3khMZExwMNFGIwKwKjeX2elpdPHy5j53d45bLFx22GlkdqOlhwcC16+LWDLWUmnmdDqiN6zHEBqKnF+AnJ1FmiDw/vvvs2jRIp555hlXdXYNjT+DJnwaZTi+diXZSfGlbnh2h4PHh40it7CQri3up0uL+1m3Zz/f/LwOcN7Y+vXrx8WLF9iyeQudHmyO2Wjgx83bsV2VFUQQBLy9vRk6dCivvfbaDWO4ZFnh9J7LmDz0RNb2Z8G7v1KQacch2xEFCVEUyS/Kwc3kiYDA4QvbmbToVQIDA+nfvz+SJGG329myZQtpqekUFhRRZC0ot97gpUuXiImJoUGDBuzevRuDwUBaWhpeXl6uNsuWLWPAgAEMGDCAd99911WHLioqilWrVhEZGcmiRYuYOXMmOp2OQYMG8b///Q+TyeQS3RIh3LlzJ4cPH0aSJNq2bUv79u0JDw/n5MmTbN68mQMHDpCRkVGmnyVC2K1bNzp16kRgYCDvvPMOP//8M56enuj1erp168a9997LyZMnWbhwIV5eXmRnZ5fJKqMXBA7FVEW8Stz+P0oeXEpaWlSVnQX5tPLwdL1nL24jCgISNxa98lBVlRxZpueli3xXKRJ3vZ6g556lwpAhJCcn88EHHzB//nyeeuophg8fTlhY2B86voaGJnwaZdg5/xNUWS7z1L/94BFW7NrLlP7PoZMk7A4HXYa8y4jRozl79iyff/45giDwWMsHGPBEF/Q6HbkFhbw4cSpJaelERkaya9cucnJyeO+999i0aRNDhw7llVdeKdfTr4SShNkrPttFy5qPu94TRZG8oiyMOjMI0KhTGPc9WovDB47xcIfWhIWFOQOyJ3zEsikHkEQ97Z6vTdUm5U+Vvfnmm8yaNYuYmBiOHz9O5cqVOXPmTKkwhKSkJPr27esqNRQdHc0zzzxD8+bNefHFF11927BhAzNnzuTAgQO8/PLL9O/fv8wUnd1uZ9q0aUycOJGoqChkWebs2bPUrFmTxo0bU6dOHQD279/P+vXrXcJ17X/ZoKAg6tevT35+PsePH6dJkyak5DtINYTwYEwgdSoFsHnzZrZs2QJAiKTj07AwrIqCThCIKU6OfTMCde13IsXhIEinc1mLqqriuKp/uqvWAG9WXEvOcaCoiJomE26iiC44mJitW1xtLl++zNSpU5k3bx49e/bkrbfeum4leg2Na9GET6MMsZvWkXHhyvSYaw1GVTmXkERIgD8GvQ6dwcChPDtvDhvmcnRQVZVnOrbj2c6PIhbf5Fbt2Mm5AhuLFi1yVRQH+P333xkzZgw7d+5k+PDhvPTSS6W2g/MG99JLL3HixAkquTegY+Nn0Yk6FEXBLluJTTjA+iPfsPibb2nQtDbfjt1DXlYhe878wr2PRTJw4EB+mnaQpDPZCIJAZkEKq07NJDQ0lPDwcEJDQwkODiY4OBgfHx8effRRQkNDiYuLw2Kx0L17d7777rtSfVIUhY8++ohx48YxefJkZFl2TYOWuZaxscyaNYtvv/2Wzp07M2jQoDLeqykpKbzwwgvEx8fz6aefIssy+/btY+/evezbt4/k5GTq1atHnTp1cHNzIzExkR07dpCUlFTqsylBlHSEDvgayeSGJEDI3o84dtBZsy/Gx4cFPr64F1u9iqq6Usr9GayKQr6i4CWKSILArwUFLMvOpqGbG+6iiE6Azl7epQTvRgJ49SxDoiAQ5O2NIS+PoLeG49+nT5n2qampTJ8+nc8//5wnnniCt99+WytrpPH/ogmfRhlUVSU7KYGTG9agXpXWSlVVMnJyCfDxRgXyCwopsFjw9nAnISWVKQsXc/JCPGajgQ9e70+tqCrYHQ4uWWT6vTH0uje7Q4cOMXr0aA4dOsS7777Ls88+i8FgYOnSpQwcOJAGDRqwdu1aIgKrMrDDB+h1RtbuX0hGQQq/X9rJB1OnYLPZOHMwmaqmVhh0JiQ9vDy7NQBLJu0i/YLTizIu4wjf7ZpGbm4uBQUFLq/KkqoJVqsVh8OBXq93hSBUqVKF+vXru8SycuXKREVFUVRURP/+/WlYpTXVvO+nwYPVeahvTUSx7DgzMzP5/PPP+eijj6hSpQpvvPEGnTp1clmTJbk2hw0bxpAhQxg6dKhrKjU7O5v9+/eXWjMsKCigbt26+Pn5kZqayokTJ8jOznauwer0hA9aiiDpUB02Ln85gOoRFfj999/5NDSUZubS1vWNYi5v9L5DVXEA32dl0cvXFwWYn5nJrIz0Um2XRlSi5jUPNNeuHV5rFaqqykV/f5osXYqPvx/SNftfS3p6OjNmzOCTTz7hscce45133im/2K+GBprwadwAa34ep3dsIfeq9T5ECa4p83P1jXPushUs/mUjAPWrxTB27Fg6du95U+fbuWMPn0yfz64jW6hUsQqp6cl4enqxc992+rR+m0ZRrUjIiOOjNW9SZMtHVVWMRiN169alSZMmNG5wL/aT4VjzZeq3jaDZY07nlBXfr+XozxnUqXcP7V6shdFN7+p/Xl4e2dnZZGVluV6DBw8mMTGRZs2aueLfwsLCkGWZ/Px8LBYLDofDNeZpz67GqDfjUGyccWzC7A8BAQGuV2BgoOt3d3d3li9fzowZM0hNTeW1117j2Wefda0lXrp0iX79+lFYWMiCBQuoWrVqudcqJSWllBDu27cPvV5PSEgIeXl5pJkjMNfvSP7vmyk8/DNGo5GioiJmhIbSysOTksqB1yvaezXlWWiqqnLJZmNrQT4FisoLfn6IgsCGvDwGJyeVarsjKhp/nQ5ZVRHLOefVXC2EBbKMWRQ5JooIo0bS4/9xhgLnA8aHH37InDlz6NSpE++8845WzV2jDJrwadwQVVH4fe0KCrMyiWregtPbNrrW/8p7SgeY9s13bDpwhG3btpWZ1rsesqywaMQuCnItFBYVoZN0SIKEikpuQSa+ns4YLpvDwtSfBnI55yLDhg1j9OjRpQq4KoqK3SpjNOtc740fP568vDzef//9m+rL77//TpMmTWjfvj06nY7vv/8evV7PyZMniYqKcrWzWCwkJiay5YsLWHOc18BYO4GM3Mukp6eXeaWlpZGXl4efnx8BAQEYDAYyMjJIS0ujTp06PPzww1SrVg0/Pz+2bdvGF198wdtvv83gwYNvmO6s5DM4f/58GU/SEseanJwcdKrK6KAK1DebCTcYkK5jbd3oHFfSxV1xcBmelEhHbx/cRJG3kpNJcthL7bckIoLaJnMZwduZn09Vs5kASSpTPNihqkiCgCgIyKrKIxfOk63T0blzZ95///3/dz0vOzubWbNmMXv2bNq1a8eIESOoVq3aDffRuHvQhE/jD5GXmkLi8aOkx525YT7Oqh2fIOQPuJsX5dn4avivqApQfFu99kasqipZ+am8v/xFhr81jJEjR97Usbt160aPHj3o0aPHTfenf//+fPPNN/zwww/07t2b1NRUgoKCOH36dJk8ojaLg/iTmQSGe+IVcOMq9Xa7nczMzFKCePr0adauXcu+ffsICAggJCQEWZZJSUkhJSXFFegfHBx8XUvy2pfRaESWZWJjY53rhXv2EPHzz7Q3mpyCAmWmGUuucXnhDOVRsi1Llnng3FmudyOJMhhYVsmZxDzFbsckivhKEjZVZVVODk/6+JTqg0VRyJBlQnU61zleSognttgBKj093TVdPGDAgHK9dEvIzc1l9uzZfPjhh7Rp04YRI0bcdOJtjf8umvBp/Cnidv9K8vEjiDo9+XY7Zq7cKAVRpGmfF0ulovr/UBWVJeP3kpnkTGN2PYtywtJ+PNazI3PmzLkpD0GbxUGjeveybNWSPzTllZWVRZXKVahSsSarfvmR8MhQHqrTg3YNnyYwxIv2L9UjIMzj/z/QH6CgoICFCxcyc+ZMzGYzgwYN4sknn2TGjBlMnz6dV155hfvvv5+MjIwyluS11qXRaCwljP2ys7knI/OG5y9XCK/6p7zPQxAEFFVl0uXLfHNNAuxKej1PePuwp7CQoYGBVDIYcKgqOwsLeMjDEwVc05+6kmMDy3NyeNTLC1PxuivAt9lZjE9NRQDGVAjmQS8vpqel8ktBAY+2bs0Eb2+MaemETJyA+1VxliXk5eXx8ccfM336dFq2bMmIESNcFew17j404dP4yygOBwlHDlCQ5byxhtSsjU/oH4utOvFbEtu+PYVsV1BRMbrpSMu4jKfJ70oZIlQ++mUwnoEGxo4dS/v27W8ofvlZVr4du5uC/CJqNK9A/UcrlnImuToI/+q/S15Lp/8GuV7oRD2Shx05/0oNwUJHDun+u2nSpAn16tUjIiKi3MoFfwZFUVi3bh0zZ87k6NGj9O/fnxYtWvDGG28QEhLC559/fsPg7ZK1y6uFMfzdEegtFtd2QRBwqCqX7XZ0QIXivpd64Cg+nnDNsUu2yyXxejjj+frGX8KqqmQ5ZNJkB5urRBGk02EtSXQgihQqCiNSknnJzx8BiDAYMIkisqrS7MxpVEGgUFGYFVqRVsVZcuyqyrDLKWzIzaWOycSX4RG4iSIFikLjM6fp4uPDqMAgzKJIUUg4v7z5IT0ahxMVWPbBJD8/n08++YSpU6dy//33M3LkSOrWrfvnPiiNfy2a8GncERxcd4E9q86jOBRKbrV22YZBZ6DkG6qqKrVahpJhcNan8/T0ZNy4cTz00EPlCuCZ/ZfZ9PVJZJtCdkE6IxaVneos2a+8nxOeWoq7yel0IisyknhFNNNykhj7XVn3ekEQMBqNeHt7U6lSJerWrUvjxo1p2rQpVatWLbUeeTMcP36cWbNm8f3339OlSxdMJhM//fQTM2bMoFevXjcdHJ6xaBGp4yeUstbSHQ5kVE5aLLT08CzXu/Na8SvZLgO/FxXhr9MRqte7RFAnCFhVlf9dushX4RH4SBJFisKnGek85evHnoIC3kpJpqQS4pCAQLp5e1OkqnyZmcni7CxXn2ubTHTw9GJbfj45ikxHL28OWoqYFByCgMoFm50nLl6gptHIosrRqKLIruBafNDof3gaYPtbD+Nu1GEopxZiYWEhn376KR988AFNmjRh1KhRNGjQ4A99Nhr/XjTh07gjsFtlti85haXQQcq5HKyFdgRRwGDSYS10oCoqggidBtYjvIYfsizz3XffMWbMGEJCQhg3bhwPPvhgqWNa8u18P3Ef+VkW7ns8mnptIpxu+A4HDocDu91+w58XD+ZxcZcFFRVFlYstT6c4fLnzXS4lnSU/P79U3tI/gtFoxN/fn2rVqtGyZUtatWpFw4YNyw3mT09Pd4VDhISEkJqaSuPGjfnkk08IDAy8uWuclsbZhx9GLiwCnJYaQKGiYBBFdFB2OhNKreVejQIk2u1sz8+nq7c3HsXWtF1VmZR6mRMWCy/4+bOtIJ8figsMX4tJENgbUxWdIGBXVdqcO0ea7KCywcAPlSIRgAs2G5UNBoyiiKyTmBsaysW9e9mWn4/o7k5AQAAV73uBUFFgb1B1FEmHYrchiCKSbGXR0zW5r0Gtcs9fVFTE559/zpQpU6hfvz6jRo2icePGN3U9Nf69aMKncceRm17E2QOpVKzqi3egmcsXchAlEXcfI34h7qXaOhwOFi1axNixY4mKimLcuHGlcmmqioosK+j0N7/eeDV2q4P4k1n4hbjjHWSmINuKm7ehXIcKi8VCeno6KSkpnDt3jrNnz3LkyBFiY2NJSUkhNzcXm832h0RSEAT0ej0+Pj5Ur16drl274ubmxmeffUZcXJyzEO7UeYR71KZy3QAiavrf8Hjpn39O2oyZKLLsyqFpVRTGX77M2ODgUlZfgaJgFkUcqkquLBNQ7GwCpdf59hcW0ugqsU52OOh58QLpV8WAXo+3AgLp7efnOlbLc2dJk2XuNbsxNywMkyiiqGqpvlbeuIHp8+aRnJyMh4cHK1asIEn2JOjJ95zhNqqCYi1EMnui2IrI+GU2RbE76NGjBxMmT6FyRFgZS9lisTBv3jwmT55M7dq1GTVqVKnvkcZ/C034NP4T2O12vvrqK8aPH0/t2rUZO3YsDRs2vN3duiGyLJOZmcmlS5c4dOgQ27dv5/Dhw8THx5Ofn498Vdq46yEg8EG/FZgM7ijI+DfL4qF2LahQoUK57S+93J+CrVtdAei6YquuSFXRCwKGq4TNqqpsz89nUVYmbT08efoqgbr6p0NVXTk5VVUl3m7HW5IYmJjA/qKi6/a9kdnMJ2HhuBU/RFgVhfvPnaVAUZgVGkpLD09EnJalrtiJ5o2kRDbk5/PQQw8RHx/Pvn378PLywmq10njsWnIcOlSHlYLfN+NR52EUSz5JX72KUpCN3yOv4lH3YezJp+nieZ7xY9/D37/0g4LVamX+/PlMmjSJqlWrMnr0aJo3b36zH6nGvwRN+DT+U1itVj7//HMmTZpEkyZNGDt27H/Ge09VVbKzs1m9ejXffvstR48eJTMzi/G9lmLUm3DINiYte57LWYmIooiXlxfBwcFER0dTt25dWkZFUWHqNCSHA4uicMJqpWGxpWZXFGakpfJqQCDmYiESBIEiRcF0TdWGq60+FfguO4uHPDwJ1Ok4YbFQzWRCJwjsKSigX0J8qTEIXFk3rGIwsLRSJBJO6/KNpCT2FhXSwGxmYXhEmVAKm6qS5nCwt7CQ6iYTObLMzPw8gho2pEOHDtS+vy2/XJBpGO7FsZWf89FnX5GXlQ6KAxCoNHwVAIrdQsrCodjTLiAIAs2aNePFF1+kXr16VK1a1VUy6uuvv2bixIlUrlyZ0aNHl5lK1/j3ogmfxn+SoqIi5s6dy5QpU2jZsiVjxoyhevXqt7tbt4Sks9kc3ZJAdINAohtWwG63s2/fPn799VcOHjzIqVOnSEhI4HFF5dWAACRBYH9hIUeLiujn5wfAWauVlxMTWFclyhVaoKgqlx0OQvRXMt0oUCohtU1V+Tkvl3dTUpCA/v7+vOAfgKqqbCsoYE56GvmywuyKFalenHZsYmoqsRYL40JCAFiZk8OSnGyyi6dGB/oH8JK/v6tqBJReeyyFIJDcswffJSWxZs0a3N3d6dixIx06dOCBBx5AlmWmTZvGhx9+iNhqIMaI2sh5GSR/+Qqqw1bmWgqCQHh4ODVr1qR69erExMRw6dIllixZQqVKlRgzZgwtW7b8wxUnNO4sNOHT+E+Tn5/PRx99xPTp02nXrh2jRo1y1dm7W7DZbDz55JOc27CRBWFh6ASB8RkZtAgJoXVxcvEd+fl8nZXJRxXDMBbHzy3PzmZzQT6zKjpDU34rKCDJYae9p5drelISBCyKwvjUyxQqChOCQ9DDFceYYqtQuqpKg1yyZofTO3ReRgazMjNcolbZYOCbiEp4i2KpTDGO4unYEkq2WcPDqbLsB7y8vDh8+DCrV69mzZo1xMbG0qZNGzp06MCjjz6K2c2N0VNm89Wc6eRklS35dDWSJNGyZUvCw8M5ffo0J0+exGq1oigKXl5edOrUiY4dO1KjRg2qVKmCXq+/4fE07iw04dO4K8jNzWXmzJnMmjWLLl26MHLkyLsii39ubi6tWrXi0KFDmEwmwv39CfD2ZuHKlQRevMilga+h2u3IxSnCrMUOLSWi8nFGOouysrCqKjFGI/PDIzCLIrmyzGWHg2iDAQXnNOTOggLud3d3rRMCpYSr5F0HzlqAqqpiUVXeSk5mQ34eAHq9HofDgSAIfBFakXvd3FCAKamXae7uTh2TGQXwvSo5wvupqXxdHAZRoUIF+vXrR7du3QgODmbz5s2sXr2ajRs3EhMT47IGt2/fznvvvYderyc9vXRS7WsRRZHhw4fz+uuvc/LkSeYv+paVK5ajOmyYTCZnsoMqVahevXqpV7Vq1cpk+dG4M9CET+OuIjMzk2nTpvHJJ5/Qo0cP3n33XSpWrHi7u3VLSEpKomnTpsTHx7tiC9u1a8cnn3yC2exMrXZy2zbyXh+A1/3RqGfSUC5kujwor741DE5K5KTVyk+RlZGABLudjhfOMy8sjCZu7i4r7tr6eyVctNmItVrYmJfHoMAgKuj1bM/P5/PMDHr4+NDe04ul2dlMSksFnBZX7egYHjMYiEtL5XxeHtNDK+ImiqTY7SzNyaaGwcjS3ByOWyyMCKqARVWZkHqZAkVxnddoNNK8eXN69uyJXq/n6NGjrFmzhry8PCpWrEhqairLly9n4cKFLFy48P8VQXN0Eyp0exez0cALlfOYN+09zGYzffv2JTAwkFOnThEbG0tsbCynTp3Cy8urjCBWr16dsLCwMp7BSdlFKKpKmO/1a1Nq/D1owqdxV5KWlsaUKVOYN28effr04a233ipTKPbfzMmTJ7n33nvJy8vDYDBgMpmYMmUKL774Yqn1qfhBgyh6xIwQ7gOAfcAPcDmvTNhCusPOg+fO0cBspq7JzOrcXPQCfFcpEl9JwqGqGIqnSIWr1giLFAU3UUTB6Z2Z7nCwKDODjl7eBOr1zE1PZ3hQEIaS7C1nz5B/lXCJoojBYOD5hx/hxbNnEUWRgoqhvGWzsXv3boqKihgfHExnL28UVWVeZiazM64vXoIgEBYWRsuWLdHpdKxfv57k5GRatWpF586dadiwId988w1LliwhKyurzP5BT76HuUpDVFUhb/cPTH6qOX5+fowdOxa9Xs+oUaPo3LmzM5WbopCYmOgSwqtf2dnZVKtWzSWEasg9LLpgQhREZvaoR/vaIX/9S6BxXTTh07irSUlJYdKkSSxcuJDnn3+eYcOGERAQcLu79ZfYvn07bdq0wW63Yzab8fb2ZsWKFTRp0qRUO1VVOVmjJvpv+yB4GlGL7DhGr4UTl8u0y5Zlmp87W+r9V/z9eck/wBkScc1tROXKWp50HStQEARyZZl8RcFbksi02+mXEI/V25uMjCtrcH39/HnO15fjliK2yTIebdsyfPRooqKiUBSFva++imnTZhRVZWZaGguzywrWjRBFEbPZTLVq1YiLiyMwMJAuXbpQr1491q9fz08//URennMq1q1acwI6DkVVZS4vfhtbyhkATCYTAwYMYPPmzaiqyqhRo+jatet1E2jn5uaWsg7XZfiR7uN0vlLidhOZso2oqKgyL7/ikBKNv4YmfBoaQEJCAhMnTuS7776jf//+DBkyBF9f39vdrT/M4sWL6d27N6qq4uHhQf369fnhhx/KZHdJTExkzIgRvLFzF+K9lZD6NUE5koTy6U7KK7OgqipzM9L56CpB2lYligCdrmzjYspLen318UoSXLc+d5YePj7083PG1A1MTOS3wgIEQcBbFPk1Ktrl4Tk0OZmNliL0Ve7Ft/4jNPIu4P2BT+O7Zy+vDR3KA++NwcvHhxkzZnDkyBGUq6zHm0UQBNzc3DAajRQWFuLv709WVhZRUVGcOXMGG3pUxYFqKz9GUafTEVL7PvQNn+TBmmF88Vqn/7es1O+JOfT8bBcFBUW01Z+k18PNOHv2LOfOnSv1EgSBqKgooqOjy4hixYoVb1ipQuMKmvBpaFzFhQsXGDduHCtWrOC1115j0KBBriKxdzpjx45lzJgxCIKAyWRi4MCBTJgwodRNNy8vjw8++IA5c+bwbL9+dF2+At9r6uFdryJ7os1G2/NxgDPd2eGq1VyhDyX7llBeoPu1P0v2WZmTg0kSecTTC1VV2Zifx+tJzmK2boLInpgYV3q1AYkJ/CoYqPjSPASdAdVh49KM7piNerr7+vKimzvUrUNmnz4YTCZOnDjBL7/8wtatW1EUBbu9dK1ABJHArm9jrtKQnL0/kn94Labw2hRdPIxSkF1qPIIgEBgYyD333ENubi4HDx68rrBW7P8VOq9AFFsRaT+Ox7Mwieeee44mTZoQERFBQEAA/v7+uLu7l7oWFy9d4t4mTfjpp5+47777Sh1TVVUyMjLKiGGJQGZnZxMZGVlGEKOjo4mMjLxunliHrOBQVEx/MrvRvxFN+DQ0yuHs2bO89957rFu3jsGDBzNw4EDc3d3//x1vA4qi0Lt3bxYvXowgCJjNZhYvXkyXLl1cbRwOB19++SVjxozhoYceYvz48dSvX5+2isKo4BCutRPKi5+blZ7Op5lOi89dEFgcUYno4ptpeYJ2PdG7tn2qw8Gn6emMqFABQRCwKQrvpCRzymrlZX9/HvLwRF8sPL9ZLHzoG0hBm3dQRR2q3UL8zB6gKhyIqYq5eK1wXGYGO/R6fH19kSSJoqIisrOzXWnjStAHVCK4z3REvRFVVVAs+QiSHtVmIeHjZyguEOnCEFod7/t6UhR3gPyDq65brzC4zwz0gZGgKsXB8uev+/m5ubnh5+dHYGAgISEh2O129uzZw+DBg4mIiMDf37/Uy+TuRe+v9nMiKZd3O9TgmfsiAWdZq7i4uDLCeO7cOeLj4wkODi4jim5BlXh7SxZFdpmpT9SlS/3/pqPXtWjCp6FxA06ePMmYMWPYtm0bw4YNo3///i6PyDsBm83Ggw8+yJ49exBFkcjISH755RdX7UFVVfn5558ZNmwYQUFBTJ06lYYNG/LEE0+wbNkyXnnuOd64nIr1zBnKWzlSVZUiQSD4+ef5RpEZMWIE//PwYEhgUKk0ZQ6gZNLzemJQ3jqfoqoUqiruoug6v4wzPEIvgA6htHACm1q3ZsruE/jXacWgzk1pX5DKwS2bMezaRYjibHdZlmlzPg65OChep9MRGBhIVFQU1atXx2QycfbsWX7dsx//PrNQJQO2jEQMAREIOj2q7CB+Vq8y05lhA79BcvN2Zn9Z9Cb21NKCVtJX0eyFR+2HUKyFeDV+DLkwh7Qfx6NY8m7qcy2ZsvT0dFbNkGUZu92B7OaL5BdGYKc3EQ1mvM16jox++P89nsPh4NKlS6UsxNjYWI5YAxDrdkXQ6akT5s3KV++/qf7929GET0PjJjh69CijR49m7969vPPOOzz//PN/uMTQ301ubi733HMPCQkJSJJEx44d+eabb1yW6aFDhxg6dChJSUlMmTKFjh07IggCq1evplOnTgQGBpKa6gwfuDRgAHlbtyHIcinhcgD+Py6j4j33ALBp0yZ0L/cnSJJcYlRSTPZq8hUZD1G6riVYQnkWof0aD9FrawT2y8qk0RNPUC06Gssnn/CIIGLQ6XBr0oSCvXsRFAVjtWpU+elHUlNT+frrr/nuu+84evQoRqPRmYqtqMg17enm7Y8hKJL8S8cJbtkbKeYBcvatIHvPsjLXvOJL85C8AlBlB8lfDcSRlXRlo6RH71cRe0ZCcZo0qPC/yZjCa6HKDrK3LyR3b9ljlmCOboJocKPg5PYylqZoMOHfaTjmyLrIBVmIZi+QDIiylUCDjZaBVlpWr0ClSpWoVKkSnp6ezPs1jm/3xNO3eSRPN60EOHParlu3joULF7Ju3Tqad3iSM5W6gCAyqtM9rnb/dTTh09D4Axw4cIBRo0bx+++/M2LECPr27XtbsnYkJiZSvXp18vPzkSSJKVOm8MYbbyAIAvHx8YwYMYL169czevRonn/+eXTFTiipqalUKJ5SLCgoKGW9qqrK7ub3413swJLicOA1bSqNunYtde7YESOxLV2KDqd1VmL5lRwDINXhIOiaag4llATLq8X7C8XHAKewWVW1VH5QrtomxUTjO28eEyZMIGzFCtqb3RBVFUEU8WjRAt9ePbGcOIHP44+ju8ahx2azsW3bNlauXMnKlSuRJInGjRvj5eVFdnY2sbGxXLhwgfz8fNc+Op2uVLJwnXcF3Gu3wZpwAsuFQ1cOrjMS+uxsJA9/HNkpKNYC5PxMjBWrI3k4nXayNn1B3oEVGMNr4ffQC1iTTpG54RNQFbyaPI5Piz6gquQeWEn+4V9QLPkolny8Gj+Gz4O9wfUgoTgvxtXXSHEgLhtCZkY6ubm5SO4+hL78JYKkR0RlRisPvl+3jY1L5xMdEUqfPn3o3r07vr6+5FnsFNlkgrxMN/7S/YfQhE9D40+wa9cuRo0aRVxcHKNGjeKpp55yicut5uDBgzRp0gRZlnFzc2P9+vU0b96c3NxcJk+ezKeffsqAAQMYNmwYnp6erv1UVcXHx4fc3FyWL19eag2whMQ33yRn1WoEnHF3VTdtRF9OgH9GbCzjX+5P86QkagiCa5ry2mnO8tb1wDmV+XFGOp29vKhiMGJXVc7YrHhFRhJSWIQuN/fKcQQBwd+frWEVmbF9O99WrYqHxYri5gbJySBJmGrUIGzOHPQVgm7qGqqqyrFjx1wieObMGdq1a0fnzp1p164d6enpzJo1i9WrV5OQkIBer8disZQ7hSuZPQnuNwfJw/eqMaqostPzU3LzRlUUEAQKjm3EFFnviuPLislY4g5Qsf9XSJ7OMBq5IBvR5FFs9QkIOr3zuMXHKO/aoirk7l6KPeUMfp3eRM7PQnLzRpB0qIqMXJiDzt0HD6OO7cNb4+/tWWYcdxOa8Glo/AW2bdvGyJEjuXz5MqNHj6ZHjx7/r+v6X+HHH3/k8ccfByAmJoYdO3bg5+fH559/ztixY2nfvj3jxo0jLCyszL7t27fnl19+4ZFHHuGXX34p9/iOzEzOPfwIisWC5OND9KaNiNeZ0pVlmfWtWhFxObXU+uC1Vl5J2IKK0xu05IadaLdTUa93/T3xcgotPDy5z9sbXUgI3+dkM+vUKcKA6dHRBOsNOKpVQ9m7FwOgj4gAwBAWRsVZs5A8/rzzUXJyMqtXr2blypVs27aNRo0a0blzZzp16oS3tzc//vgjS5Ys4cCBA1SsWJHz5y/gfn9v9KHVKTi5A5/7/4docFrP9oxEJC9/UCFn30/4NOvhFO9i8bImxWKoEAVA/rFNuNd8ENHoBpQVtesl577e+3JhNjp3XxTZQe6+HzFXboQhsBIIzjR0guIgZ8kw2j/QiF69evHwww9jMBj+9HW7Grtdxq6ouBn/mQfAv4ImfBoafxFVVdm4cSMjR44kPz+f9957j8cee+xvj6kaP348I0eOBODpp5/myy+/ZO3atQwbNoywsDCmTp1KvXr1yt33s88+46WXXsLNzY2CgoIbnkfOL6Do8GHMte5B8vG5YduEVweSs2kTqqI4py+vup2kyTJ6wEeSUIEERSZYEJ15OoEkh52KuivCtzw7m64+Pi4nlqj9+5g8cCCP79zlEkwEAcFgAFHEt0cPKrw1/GYv301TWFjIxo0bWblyJatXr8bf398lgpUqVeKnn35i/tpdpFXvhqA3IednOqcaPfzJ3bec7O0L8XmwNx612+DISkZfoQqizuBcv8yIJ+Wb4bhXa45no87o/cPLxDneKKTkerfrkjaO/Cwkdx/nm4qMYitCMl+x7nSigI9ZRxevC6z/YSEnTpzgscceo1evXrRs2fJPP7QtP5TIoO8OA3BvZV/uiwqkRbVA6hVnBLrT0IRPQ+NvosSDctSoUSiKwtixY10OJX+Vnj178t133wHw5ZdfUqtWLYYOHUpGRgYffPAB7dq1u+55jh8/Tq1atQA4d+4cVapU+cv9KcGRkUHajJmcOHkS89GjiILADyYjsfHx7AK6VghmoAA6ReWYxUK8zcYjnp7IwPi0NMYGBbkcYzIcDvyL1wVVVQVBwL1ZMwp270YoEQGzmco/LEXOycFcv/4tz2KiKAr79u1j5cqVrFq1ipSUFDp27EjjNp2ZedyA1W7HdjmOzO/fxSHo0Kt2bDYbFfrOwhAYiWK3UHBiO5J3IKaQaiCKoIKqKog6vTN04iZuwddLAnAt9uwU9D7BV66hqoBwpb6iaz/ZgckgMaShgf3rlrF+/XoyMjKIjo4mJCQEnU5HXl4eeXl55OfnU1hYiMViwWazYbfbkWUZWZZRFAVVVQl5fi4634rF53CmJBcFeLZ5Zd5+tAaSeGdlm9GET0Pjb0ZVVZYvX87o0aMxm82MHTuWhx9++E/dpFVVpW7duhw7dgyDwcCKFStYuHAhW7ZsYezYsfTt2/eGa4sWiwV/f38KCwsZN24cI0aM+CtDuy4X5y8gd9IkLEYjC40G+uTkYJckVjdrRpX4eKTkFDov/Z74J57EIMsUKAqFsoxfSd9VFemaXJ8ASBLG6GiscXEYY2IImzkDQ/EU5+3gwoULrFq1ipUrV3LgYhZVmz5E+xqBnD1xhNWrVxMTE8OZM2eo2XciiVIFZ03DxW+DIFCh50REg+mKRSfbQVWRC3NQbEUYAiLKXQ/9/2IjS7aVUN5U8/XCSwqObyV99dRrt2COaow15SyqrQC/Ni8junmTtWEuSn4Goii6XpIkoTO54dFuMFLFWlcma4sF0KSX+OCJunSqG/r3fAB/E5rwaWjcIhRF4YcffmD06NH4+/szbtw4WrVqddP7W61WgoODyc7OpmLFijz55JN8/fXXDBw4kKFDh+Lh4fH/HuPee+9l7969VKtWjdjY2L8ynBty7tEO2OLisCgKyYpCZZ0OBchs3Yovjh+na0IiNWpUx1IlCsP69SjFIRBlnF+uOqYAeLRpQ/hHs29Zv/8KOTk5rFu3jpUrV7J27VpCQkJQVZXLly/T5N6mHEy2ULtKKIe3rSU9M4ugJ8ZgiqiNigqKjOXSMexpF8n+7VvMleoS+Njbxa6rzoeB6wX83+i9q99XrAUIOgOCpC93P1SFjPVzKThyZb1XHxBBSL/ZLisxd+8yPBt2RhAlis7uJWPFJNcxSn4G9pmJPqBSqfdRVRDArNcx56n6tK5e4RZ9Cn8OTfg0NG4xsiyzePFi3nvvPSIiIhg3bhzNmze/4T4pKSmEh4fjcDioU6cOKSkpdOrUibFjxxIaenNPz2+//TaTJ09GkiTy8/MxmW6du3ranI/J+PRTVEnC2P1JrN8uQRAEjK1bU/jzzy4Hl1WFhZz38WaQzV5ubJ9gNOLRti2i2YRvz56YatRA+Bfkn7Tb7fz222+sWrWK7777jvT0dIxGI82aNePMmTPI/lFk6Xwp+H0zgijh0bAznvXaAZC3fwXZ278GQUTvH0HIs7MQBPGmkgCU6+RSMsVZso+ku5IbVXYgCCJCsXWtWPJJ/ORZV6C+f8fBuNds5RLHwrN7MEfWK/ZI3UTm+o9L9cfnoRfwati5XKtSEATGd63FU/dG3PIp6T+KJnwaGv8Qdrudr7/+mnHjxlG9enXGjRtH48aNy7T79ddfeeCBBwAIDAykYcOGTJkyhdq1a9/0uTZs2MDDDzszeqxbt871+63EFh+P5OWF5O2NNS4O0WTifPceyMU17mRJIrFtGy6FhND8q/mUrAa5t2yJmp+PqUYNPFu3wr1Zs1ve11uJqqqcPHmS6dOns2TJEmwGb0Kf+wgVEUduKkmfvUjoS1+g864AqOQfWU/muo9c+7tVfwD/R99whTFcfVwof+qzdAcUlxfntVae6rChynZEozNHqGK3krzgdRwZCQB41HkEv3avutonff4SxpCqiGZP8g7/AnLpXKcRw1aVsTyv7l9MkAcze9anVsU7qyCvJnwaGv8wNpuNecVB2A0aNGDs2LHUrVsHuz2bjz76kiFD3gSgatWqzJ49+w+LVmpqKuHh4dhsNrp37+5yirkdpM78kIwvvkB0cyN4zBi82judcPJ+/ZW0j+bg1akjAU89ddv6d6tRFIXxcxYw76I3gs6IXJRH0rz+hPWfX2yJKSR9MQBHZgI+rZ/HLaYpeQdWYwyvhVvMvdc9brnTm4rsfJIQBUpCI1ztZDtFl45iT7uEe/X7kTz9QVUpunCItJ8mgOzMNKPzDyOk72xnztTLcaQsHHzD8V0rfFDW6caklzg1vv2fuHq3Dk34NDRuExaLhU8//ZTJkyezYMGLhIW5k5CQSadO05g9ew7PPffcH3YvVxSFqKgoLly4gJ+fX6m6drcLR2YmkoeHMwzhLmXOplMs2X6MA/PHUnTpd4J7T8UQVAXr5XNcXvQmpsr1CXryveLWKqnfjyboiVEgOgPQBVG6rrCUYLt8DmvyadyiGjmzxQiicy0x/ndSvxtB0JNjMEXUBekqz1lUbKnnSZn/OqLZC58HnsK91kOIehOOvHSSvuiP/6ODkNy8yVg7q1SKtgpPfYCxYnXX39dztBGA85M7/K3X86+iCZ+Gxm0mLy+blJR5CIKAxWKnU6epXLyYgdlsJjAwkGrVqlG1alUqVapEUFAQAQEBpV4liYxVVeXrr4fh56cwZcpqFi/eSHh4+O0ensZV5OfnM336dMaNn4Bq9kHOSwdVwe/RN/Co1drVLnnB61ToNRnJ6HbDcIeSz92WfIbLS95BtVswht1Dhf9NBkC1W4mf8SSgEvzMhxgqVCkT4qCqCpemdCbk2TnofEIQdDpUh53MjZ8iGt3xbdEHRB1KUR6Jn72IaDAhGt0IeXbODT1GS6xAgyRwesKjf++F/ItowqehcRs5evQodevWZcqUXnTt2pA9e84xbdpOzpw5W26guSRJGAwGV4Jsi8WCw+Ggdeu6PP10U+69NxJRFLFaVe65Z8g/PRyNmyQtLY3x48czd+5cVPcAQp//GEFy5nxVHXYUuwXR4AbilbU6R34mBcc24lbtASQvf0Sd4Upi77QLFJz6DWNIVRSHDfdqza9kyJnbDzkvHX1ABL6tX0DvH+ZKjwbgyMsgaW5fwl5fgmTycFmC1qRT5O1fQUCnYU5nGEXGkXMZnVcgjvxsdJ7+LscjVXWmaBMkXZk1xjBfM7+99dDtuMzXRRM+DY3bRO/evVm0aJHrb4NBQhT11KpVi3379uFwODhw4ABr167lp59+4sSJE+h0OldBVVVVEUWR7t3vZdSox9Dprtxs9HpfIiOfvY2j07gZLly4wNDRE9kb0A5B55wKLs9ZRFVVVFVxBvILovP3a6pflHZ2cQaRq7KdhA97ojps6LwrEPzMDESTpyvcQC7MJfnLgSiFWXg174VP8/8V90ylKO4AaT+8R2C3kZgqNwCU4tCIsh6nclEuktnrqgB2KFlnnNG9Lo81KJtC73aiCZ+Gxj+Mqqr4+fmRnZ1dZltUVBTnz59n1qxZvPLKK6W2Wa1W9u7dy5YtW9i8eTN79+7l3ntrMmdOd/T6K2tAAGFhT2My3VzCZo3bz4J1e/nwu3Wk2M3ogqMRBAkUB/bcNPS+oYCK6rAXF8wtuWWroCjObDBXObMAFJ7dR/7RDVgTT6AUZmOOaYZn/UcxVaqDIEooDpszyFyWydn9Hbm7lhLQaRhuNZzexKrDSsKcZ1CtBSCIBD/9AfoKUQii5DrPFaFVcORlOi1AQXCJKgj8r0kEE7vdvDfyP4UmfBoa/yAlZYGuh7+/P08//TQff/wxFy5cuGHMXlFREQcPrsXT8xRubsbiG5FEUFBbvLzuuRXd17jFrNu0jZd+yQTJgGKzkPr9SOwZCQR0G4EprKarXYnwpC2fRGDXt8tYfJe/fQdr/DEAjBG1CXpiNILuqmTjxSnhUGQsF49QcHIb6Ez4t30RECk6s5u05RMBAd92r+JZ50rmoVKWZYnoeQWUm23mwh3m1FKCJnwaGv8QS5cupXv37uVukyQJRVHQ6/UUFhYSERGBn58fR48evWHwb7NmTenSJZJ69SpRs2YPIiIa3Krua/xDtJu5nbi0PAQEfPfO5ejFdAIfe/c6Xp0qgiJDcc5PVbZjTz2PIy8DY2g1sjZ+Bqj4d3gDQX8lgYHLKSb1Ano/p0WZd2gtjswERLM3eQdWog+OwathZ9yqNi3n3OoV8bwmdMJp7AkEuBvYP7LtLb5afw5N+DQ0bjGyLNOlSxfWrFlz3TYNGzbkyJEjrsS/Bw8e5N5772XcuHG89dZb5e4zaNAgPvzwQ3Q6HUePHqVGjRq3agga/yCZBTZWH02iTpgP9cJ9mL7qIB/+mnTdtGV6CfQFGQSYZITEY+zbs4uAjkMQDWbkojwy18/FEByNMbQait0CqoreN4SCAytQDR743N8LBInCs3tI/2kCAG41WxLQ8YpzVJlgeEVGseQ7K8Ff00YAAj2N7BtxZ4oeaMKnoXFLSU5Oplq1auTl5ZXZJggCOp0Ou93OO++8w8yZMyksLESWZURRZMCAAcybN4+jR49SrVq1UvsuX76cxx57DEEQ2L59O/fff/8/NSSNfxiLzcF9728ms8CZ1BrAJKkEGRXiC1Tkwlx6+53n04VLmLVwBf56Oy9+fwoVFUEyoDqsWC4eIe3H8WWOrXf3xr/ruwhGd9KWjcORk4L3A0/j3axHuVaeLT0eQ0DEdVOUAXStF8qAVtFUrXDnFrvVhE9D4xaxevVqOnXqdN3tkiQhyzKCIPDee+8xc+ZMMjMz2bdvH40aNcJisRAZGYmHhwcnT55Er3e6u8fFxREV5SxkumzZMrp16/aPjEfj9uGQFdLzrfx8LIXE7CIGtIzCy6znVEoehZfPM/TtEVys1Q9Jkqga6sec/9Wn17sfkeJZFdFgwp6dQu6u77FnXMKaWJysXNLh2+o5PBt0BMBy8QjpKyZT8ZWvEYs9TEtbecX5PwWhTLYWUKkZ4knf+yrTvfHtq55xs9z52V81NP5lOBwOnnvuuf9X9CpXrgxAnTp1yM3NxWg0IgiCqzq6yWTiu+++IyEhgXfffRdwOrSUWH8zZszQRO8uQSeJBHubefb+yozsWBN/DyN6SaRWRW+aNKjH7C8WYjAYUEQ959MLiAryZMfcYfjbLmPPSkIpysO3zUtU6DkJU4SzNmOF7uPxrO8MLBcEAVOluoS99i2q3VYcPqGiFjlnKlRVcQleqbU8nCt8HWqH8PPrLf4Vogea8Glo/K1cunSJmJgYvvzyyzLbdMVFVk0mE3q9nosXLwLQv39/l/AZDAb27dvn2qdFixZ0796dRYu+5PDhH3j88QdwOBw8//zzDBo06J8alsYdTp0wH55sEklFHzOTisMHjDqJQx8NIObUN4hmL0S9ESQdfu0H4evrizG0mis8ocR6EwQByexOwcY5ZK7/GEFvdKUdA5zOLKqKl0Ggfa0QXn8omrhJjzLnqYa3Z+B/Em2qU0Pjb2L58uV0794du91eZptOp0OSJGw2GwaDgebNm7NlyxZUVcVisdC3b18OHz5Meno6QUFBHD9+3LVvTk4Ou3dPJjLSH4dDZvz4rSxe/PMdV+pF485EURSiH+mDXL+HMwOLw0by/NcJ7T4G1d0fEIpjAYvb24rQGYyogljsuFn2ezajez0ea1DxHxzF34tm8Wlo/EWsVisvvfQS3bp1K1f0BEFAr9djs9kICQlBkiSKiopQVZXAwECMRiN5eXmYzWaCg4O5fPlyqf29vLyoUiUQSRIxGHTMnfuBJnoaN40oihxd/in2U9uQbUUIOj2hz85G9QxyWnyi6CwRVTx9KelNKM4ywaUysTSJ9OHBmAAmdqv1rxY9AN3t7oCGxr+Zs2fP0r59e86ePXvdNh4eHhQWFuLu7k5RURGdOnVi2bJlAHTu3BmAgoICzGYzkZGRnD59uswxRFGPotgRBBF390q3ZjAa/1k83N2Z9+4LvLzsDE4LT4egKqgIrrg7sTjbijPZmRM3g4inUU8FbxPfPN8Mve6/YStpwqeh8SdZsmQJzz77LEVFRddtExkZSWZmJoqiEBAQQHp6OhERES5vuYEDBwJO4fPx8aFRo0YsX7681DEEQSAsrAc5Ocdwd6+CXn/nuolr3LlY9R6lZgoqBbhzMb2wOAgd6of7cCg+B50oEB3kgb+HkY//1wAf9/9eOSltjU9D4w9SWFjIq6++yuLFi7FaraW2VazoS+XKgezefZZ77qlNdnY2iYmJTJvWj6ZNw0lOtpOZmc6aNftZteoIVqsVVVVp3/5+/P1DGTz4LRo1aoTNZnOFL2ho/B0oisL/vtjD4UvZPHt/ZZ5tHkmzyZuxyyoP1wzisz6NOXAxizyLnRZVA//T0+ma8Glo/AFOnDhBly5dOH/+PLIs4+1tpnbtcHr0aMrZs5fp168FAMeOpTB9+jpstiKGDGlHs2bR6HRSqaDfo0dTePzxD0hJWUtu7nFUVaBChY6sX/8RNWrcR61aPf/TNx8NjduFJnwaGjeBqqp89dVXDBo0yJWF5YUXWjF4cHskqfS6hyAIFBXZMBh0Jd7fiKKALKtIklAq68Xbb2/lvffux2jUu1Iflmzz9W1MQMCD/+xANTTuAv4bK5UaGreQvLw8evfuzeDBg0ulHuvV6z50uitlWkqss6IiG3q9hCSJrvcsFjuLF//GpUsZpTJevPxyP4zGisXHoNSxrNb0f2qIGhp3FZrwaWjcgEOHDlG/fn1WrVpFTk4ODz5YnePH32ffvnGsXXsYh0N2tVVVFYdDpnfvuSQlZRdnv4A1aw7x3ns/Mnv2VhYvvowgVEIQdHh4VKVNm25ERT1FhQodCAl5DB+fxgAIgp7g4Edv06g1NP7baFOdGhrloKoqc+bMYeTIkeTn5+NwOAA4dGgCHh4mVFUlNTWXp5+ey2OPNaR27QiSk7Po0qUhsqzwyisLuO++aE6dSkGvr8z48ePLJJrW0NC4PWjhDBoa15CVlcVzzz3Hnj17qHFfM1o+3Jidy5exbevxUs4mgYGefPhhb7p0mY6vry8ff/wURqMeWZa5774a9Ow5ivr169/GkWhoaJSHZvFpaFzFrl276NmzJwAB1e/h1VlzEQUBfyWOkb364uPjxuzZz2Aw6BBFgYICG6rajgcffJCHHrqHKVOeRJKMhIX1wmDwu82j0dDQKA9tjU9DA2eM05QpU+jcuTM5OTlcunSJ+vfWQRBEFEHCLnlSr14ltm49Se3ab7Fr12UMhkDOn/ejadOmVK5cmUWLNhId/TqVK/fXRE9D4w5Gm+rUuOtJTU2lT58+nD9/nqysLGRZJiYmmFefDOCSkIQNE1U4wGOPNWL+/O3s378fb29v+vV7idOnTxMZGcmePXswmUy3eygaGho3gWbxadzVbNmyhQYNGpCWlsbp06eRZaeXpr+/BzpBpqbwG/WETbgL+VSqFEhqairr16+nadOm1KpVC4vFwpo1azTR09D4F6EJn8ZdiSzLjB49ml69etG67ws8/8W3jFuzGa+AQAB27z7L0qV7sNtlHA4Zq9WBLN9D69at2bFjBxs2bGDFihV89tlnrmroGhoa/w405xaNuwabrHCpwIIjJ4sXn+pFckoKUfe34snhIxFFEVVR+H7KeNZ9+alrHzc3A82aNeD48QsAzJw5kyeeeILOnTtTo0YNpk6deptGo6Gh8WfR1vg07hrWJWaQnJuHIitYPHwY8sNXGIzGq1OmkJeZWWqfwkIbx49foLCwkEWLFtGpUycmTpxITk4OkyZNug2j0NDQ+KtowqdxVzBp0iS8HumGm6cnNouFDi+/itFsBiiVOLrhw+3Zv241qsOB3W5Hp9OxZMkSzpw5w7er1qDzC2D27Nns27dPq56gofEvRVvj0/hPc/jwYYxGIzM/+xxDsQOKTq/H6OZRnFLMKXolP2s92Ioeg99yZWoZNGgQLVq0oHnXJ2gx8E0ueQbx8Y8rCQsLuz0D0tDQ+MtowqfxnyQlJYX69etTv359XvtsIeNXb0bSOSc4BFHE5O5eKgtLye+qIpOTmYFer0en03HkyBHuueceJs2Zi05vQG8y4l85+raMSUND4+9Bm+rU+E9RVFTEkDFjOXgyljMXLmAwm6nR9D4EUXRZdYIgIEoSF44fwzeoAl4BgaiqSnpiPJu+/pJNi74iMCCAy5cvc/bsWQoKCghRbKReukhoxVDq+Fa4zaPU0ND4K2henRr/CawOB1/uOoRscsfs5eWy4NLiLxEYFg6CgOxwIOl0qIrCiV2/ElmrDiZ3D+KOHOTMgf38NPN9BJxZXPxDQinKzWXh1wvo1KkTnTt3ZsOGDdjt9ts7UA0Njb+MJnwa/0oUVcWhqBgkkQXbdpGld8PT398ZllBc7+5qC+/qtbyivDxMHh6IoujaZi0sZNwTj5J87iz/GzGOlr2exlFUyLP1qmOURIxGI/fffz+bNm26ncPW0ND4G9CET+NfhaqqnM8rZPvlHBRVJSc9Fe+AINd211rdVV/rq98rEbpr37NZLGQmJ5J09jT33PcgRnd3BEWmTVggJ37bziOPPEJcXByVK1f+B0eroaFxK9CET+Nfxe9Z+exLy0ZFKGPVAeWK2tW/XyuIiqIA4LBZ0RmMKA4HekshePngppPoEhFI3XtqkpycTE5Ozj85VA0NjVuE5tyi8a8iscAC14gelBW5Ehx2u8ubEyhl8V29j95owmGzYjKaeCCiAqFuRvSigKoonD59mtdee+2fGaCGhsYtRwtn0PhX4a3Xce0UxY2mN10hDOW0KXm/ZFuQpwctQ/yI9DBhlEREQWDcuHGoqqqlJtPQ+A+hTXVq/CtQVJVcu4NFv+7DLaxSGSEr+VtRFNfvV8fplTclWvJ3ieX3YAUforzcSp3X398fb29v4uLibuHoNDQ0/km0qU6NfwXrEzNIyMnHFBpe1npTVVSKRU1VkWXZZeldz7Mz/dIFMs+cokJkJE3q1yfKy41gN2Opc6alpZGZmcncuXP/mUFqaGj8I2gWn8Ydj6KqLDibDJR2UrHk52P29Cy1Vme1FLF7xU/Ue6gtoiji5u2NJOlKO7eoKpHuRno2uIedO3cSHV1+JpbOnTuzdu1aLXZPQ+M/hrbGp3HHIwoCAQ5LqdyadouFFbOnIcvOnJol21LizpGbkYablzfu3j4oioqloABFUZCLBUwFFn4yh/r1619X9ADWrVvHfffdd8vHp6Gh8c+iCZ/GHc+GoydJtCucO3yQBSPe5MyBfXz25kDWz/+c4zu2wVXTmSFVosjNTHf+LYrodDocNhtvPXQfWadPACCKIqbAYDZu3MiMGTPKPefWrVux2WzMmzfvnxmkhobGP4Y21alxR6KoKmkWG4d37eSURyCevn5YCvJRFMWVdmzpB5MoyM2i3XP9Ca9WA0WW+f3Xrfz24/e8NHMuOp3eGasny3gd2837H33MC7M/R9Lp+GrwKxSkJHLkyBF8fX1ZvXp1KevunnvuIT4+ntzc3Nt4FTQ0NG4FmsWncUeyPjGD1RdSOO0ZhNFsRlVVDCYzRrOb8+XmztOjx/PshGmkxJ3FYbehqipxhw/R850x6PUGUFUUReHEutU8+eSTvD9qBD9/Opv4E8fp+vjjHD58mP379yNJEs2bN6d27dpkZmZSYLNzPiGBp5566nZfBg0NjVuAZvFp3JEsOJuEooLdakEQJXR6PWqxx6ZYXF2hxFElOe4cFSpFgiAQf2gf3hGV8QoIRBRFivJyiSnIQLAWcTE9E6V2Y/RGExLQJybUdb65c+fy+uuv02vEOFr0fBqAOj5uNAryvT0XQEND45ahWXwadyT1/TyRBBDzczm95zeXV6ZOp3Pl1gRAEBBEkeM7d5B76TyXL1/Gyz8AsTgw3WB24+s165g0aRL79+xGknSgqph0Uqnz9e/fH5vNxgNP9HAFtZ/Os9yGkWtoaNxqtDg+jTuSat7uFFqsrIiLIy0xkcDEBAIqFlc9FwRkux290Rl3ZzCb+G7UMHr27Ek6ehx2G6KkQxRFjAY9H44dhb9RD8DlIispRTaiPM3lnjfSy4P4IhsAla/TRkND49+NNtWpcUeyLjGdhLwiBNE5KeGw2/lu8ljqtW7rqqMn6XQossyP09/n/df78/LbI5EFCImKISMxgYcbN+DNwYMxSn9sYiOl0IIkiASaDbdiaBoaGrcZTfg07iisskJyfiGbUrJLpR5z1swrIC8zg4CwCIRiq2/1p7O5PzwYMSQcjzqNkfROy052OGjmoaN2ZPjtHI6GhsYdiLbGp3HHsCcth8XnkllzLsFVJPZqjG7uBIRFAMWpyASB+zp346WXX+bomXNIeh2CKCJKEnqjkVhVfzuGoaGhcYejCZ/GHcPpnEIQBPRGE3artVRuTQBVUXDYbdgsFpTifJyBEZX4+pvFFJw5wZn9e8nPynS1d5Ok655LQ0Pj7kUTPo07hhKHE51e7yoQW8rqEwRkh4PMpESObNmACFT1NDN18iTurV+P+SOHM7VvT8JzU2kc4EWbiv63YRQaGhp3OppXp8Ydw30VfLiYX4RFAVVVyExJwi841LXGJ4oiRrMbwVWiqBgRwTMxoSxevJiIiAj2nT3PeyvWowJhERWo4eNxu4ejoaFxh6I5t2jcUaQUWdmXlkuQ2UBjf0+2X84mvsCCThCwKM5E1AJg1kn0qFyBevXr8/bHX3AmK5fQ6BhEUSLMzUhbzdrT0NC4DprwafwrUFUVi0Nmc3IWFkXhviBvdu8/yJZDR6jXvjMAiixjNuhpG+pPkBaKoKGhcR004dP412FXFJaev0x+YRF6vR6KnVgUReap6FBMmlOLhobGDdCcWzT+dVhkBbuqojeZQJIocX8RETiXW3Rb+6ahoXHnowmfxr8OD51EdS93TJJIQ39Pavq4oxMEJEnE36TF7mloaNwYbapT41+PqqokF9kwSSJ+Rk34NDQ0bowmfBoaGhoadxXaVKeGhoaGxl2FJnwaGhoaGncVmvBpaGhoaNxVaMKnoaGhoXFXoQmfhoaGhsZdhSZ8GhoaGhp3FZrwaWhoaGjcVWjCp6GhoaFxV6EJn4aGhobGXYUmfBoaGhoadxWa8GloaGho3FVowqehoaGhcVehCZ+GhoaGxl2FJnwaGhoaGncVmvBpaGhoaNxVaMKnoaGhoXFXoQmfhoaGhsZdxf8Bmj6Gn1wAX34AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "np.random.seed(0)\n",
    "colors = [G.nodes[n]['cluster_id'] for n in G.nodes]\n",
    "nx.draw(G, node_size=5, node_color=colors, cmap=plt.cm.tab20)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The cluster colors clearly correspond to tight social groups. Our clustering thus has been effective. Hence, the assigned `cluster_id` attributes should prove useful during the model-building process. In this same manner, it might be useful to store all five profile features as attributes within the student nodes. \n",
    "\n",
    "**Listing 23. 18. Assigning profile attributes to nodes**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Attributes of node 2899:\n",
      "{'cluster_id': 0, 'Sex': 0, 'Relationship_Status': 0, 'Dorm': 5, 'Major': 13, 'Year': 2}\n"
     ]
    }
   ],
   "source": [
    "attribute_names = df_profile.columns\n",
    "for attributes in df_profile.values:\n",
    "    profile_id = attributes[0]\n",
    "    for name, att in zip(attribute_names[1:], attributes[1:]):\n",
    "        G.nodes[profile_id][name] = att\n",
    "        \n",
    "first_node = nodes[0]\n",
    "print(f\"Attributes of node {first_node}:\")\n",
    "print(G.nodes[first_node])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We have finished exploring our input data. Now, we'll proceed to train a model that predicts user behavior. We'll start by constructing simple model that only utilizes network features.\n",
    "\n",
    "## 23. 2 Training a Predictive Model Using Network Features\n",
    "\n",
    "Our goal is to train a supervised ML model on our dataset, in order to predict user behavior. Currently, all possible classes of behavior are stored within  the _Behavior_ columns of `df_obs`. We'll assign our training class-label array to equal the `df_obs.Behavior` column.\n",
    "\n",
    "**Listing 23. 19. Assigning the class-label array `y`**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0 0 0 ... 1 1 1]\n"
     ]
    }
   ],
   "source": [
    "y = df_obs.Behavior.values\n",
    "print(y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now that we have class-labels, we'll need to create a feature-matrix `X`. Let's create an initial version of `X`, and populate it with some very basic features. The simplest question we can ask about a person within a social network is this; how many friends does the person have? Of course, that value equals edge-count associated with the person's node within the social graph. Lets make the edge-count our first feature in the feature-matrix. We'll iterate over all the rows in `df_obs` and assign an edge-count to each profile that's referenced within each row. \n",
    "\n",
    "**Listing 23. 20. Creating a feature-matrix from edge counts**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "cols = ['Profile_ID', 'Friend', 'FoF']\n",
    "features = {f'{col}_Edge_Count': [] for col in cols}\n",
    "for node_ids in df_obs[cols].values:\n",
    "    for node, feature_name in zip(node_ids, features.keys()):\n",
    "        degree = G.degree(node)\n",
    "        features[feature_name].append(degree)\n",
    "\n",
    "df_features = pd.DataFrame(features)\n",
    "X = df_features.values"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Lets quickly check the quality of the signal in the training data by training and testing a simple model. We have multiple possible models to choose from. One sensible choice is a decision tree classifier. Decision trees can handle non-linear decision boundaries and are easily interpretable. \n",
    "\n",
    "**Listing 23. 21. Training and evaluating a Decision tree classifier**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The f-measure is 0.37\n"
     ]
    }
   ],
   "source": [
    "np.random.seed(0)\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import f1_score\n",
    "\n",
    "def evaluate(X, y, model_type=DecisionTreeClassifier, **kwargs):\n",
    "    np.random.seed(0)\n",
    "    X_train, X_test, y_train, y_test = train_test_split(X, y)\n",
    "    clf = model_type(**kwargs)\n",
    "    clf.fit(X_train, y_train)\n",
    "    pred = clf.predict(X_test)\n",
    "    f_measure = f1_score(pred, y_test, average='macro')\n",
    "    return f_measure, clf\n",
    "\n",
    "f_measure, clf = evaluate(X, y)\n",
    "print(f\"The f-measure is {f_measure:0.2f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Our f-measure is terrible! Clearly, friend-count by itself is not a sufficient signal for predicting user-behavior. Perhaps adding PageRank values to our training set will yield improved results? \n",
    "\n",
    "**Listing 23. 22. Adding PageRank features**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The f-measure is 0.38\n"
     ]
    }
   ],
   "source": [
    "np.random.seed(0)\n",
    "node_to_pagerank = nx.pagerank(G)\n",
    "features = {f'{col}_PageRank': [] for col in cols}\n",
    "for node_ids in df_obs[cols].values:\n",
    "    for node, feature_name in zip(node_ids, features.keys()):\n",
    "        pagerank = node_to_pagerank[node]\n",
    "        features[feature_name].append(pagerank)\n",
    "\n",
    "def update_features(new_features):\n",
    "    for feature_name, values in new_features.items():\n",
    "        df_features[feature_name] = values\n",
    "    return df_features.values\n",
    "\n",
    "X = update_features(features)\n",
    "f_measure, clf = evaluate(X, y)\n",
    "\n",
    "print(f\"The f-measure is {f_measure:0.2f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The f-measure remains approximately the same. Basic centrality measures are insufficient. We need to expand `X` to include the social groups uncovered by Markov Clustering.  One approach is just consider the following binary question; are two people in the same social group? Yes or no? If they are, then perhaps they are more likely to eventually become friends on FriendHook. We can make this binary comparison between each pair of profile-ids within a single row of observations. \n",
    "\n",
    "**Listing 23. 23. Adding social group features**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The f-measure is 0.43\n"
     ]
    }
   ],
   "source": [
    "np.random.seed(0)\n",
    "features = {f'Shared_Cluster_{e}': []\n",
    "            for e in ['id_f', 'id_fof', 'f_fof']}\n",
    "\n",
    "i = 0\n",
    "for node_ids in df_obs[cols].values:\n",
    "    c_id, c_f, c_fof = [G.nodes[n]['cluster_id'] \n",
    "                        for n in node_ids]\n",
    "    features['Shared_Cluster_id_f'].append(int(c_id == c_f))\n",
    "    features['Shared_Cluster_id_fof'].append(int(c_id == c_fof))\n",
    "    features['Shared_Cluster_f_fof'].append(int(c_f == c_fof))\n",
    "    \n",
    "X = update_features(features)\n",
    "f_measure, clf = evaluate(X, y)\n",
    "print(f\"The f-measure is {f_measure:0.2f}\") "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Our f-measure has noticeably improved, from 0.38 to 0.43. Perfomance is still poor. Nonetheless, the social group inclusion has led a slight enhacement of our model. How important are the new social group features relative the model's current perfomance? We can find check, using the `feature_importance_` attribute of our trained classifier.\n",
    "\n",
    "**Listing 23. 24. Ranking features by their importance score**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Shared_Cluster_id_fof: 0.18\n",
      "FoF_PageRank: 0.17\n",
      "Profile_ID_PageRank: 0.17\n",
      "Friend_PageRank: 0.15\n",
      "FoF_Edge_Count: 0.12\n",
      "Profile_ID_Edge_Count: 0.11\n",
      "Friend_Edge_Count: 0.10\n"
     ]
    }
   ],
   "source": [
    "def view_top_features(clf, feature_names):\n",
    "    for i in np.argsort(clf.feature_importances_)[::-1]:\n",
    "        feature_name = feature_names[i]\n",
    "        importance = clf.feature_importances_[i]\n",
    "        if not round(importance, 2):\n",
    "            break\n",
    "            \n",
    "        print(f\"{feature_name}: {importance:0.2f}\")\n",
    "feature_names = df_features.columns\n",
    "view_top_features(clf, feature_names)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Social graph centrality plays some role in friendship determination. Of course, our model's performance is still poor, so we should be cautious with our inferences on how the features drive predictions.  What other graph-based features could we utilize? Perhaps the network cluster size can impact the predictions? We can find out. However, we should be cautious in our efforts to keep our model generalizable. Cluster size can inexplicably take the place of cluster-id, making the model very specific to the university. \n",
    "\n",
    "**Listing 23. 25. Adding cluster-size features**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The f-measure is 0.43\n"
     ]
    }
   ],
   "source": [
    "np.random.seed(0)\n",
    "cluster_sizes = [len(cluster) for cluster in clusters]\n",
    "features = {f'{col}_Cluster_Size': [] for col in cols}\n",
    "for node_ids in df_obs[cols].values:\n",
    "    for node, feature_name in zip(node_ids, features.keys()):\n",
    "        c_id = G.nodes[node]['cluster_id']\n",
    "        features[feature_name].append(cluster_sizes[c_id])\n",
    "    \n",
    "X = update_features(features)\n",
    "f_measure, clf = evaluate(X, y)\n",
    "print(f\"The f-measure is {f_measure:0.2f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The cluster did not improve the model. As a precaution, lets delete it from our feature set.\n",
    "\n",
    "**Listing 23. 26. Deleting cluster-size features**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "import re\n",
    "def delete_features(df_features, regex=r'Cluster_Size'):\n",
    "    \n",
    "    df_features.drop(columns=[name for name in df_features.columns\n",
    "                               if re.search(regex, name)], inplace=True)\n",
    "    return df_features.values\n",
    "\n",
    "X = delete_features(df_features)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The f-measure remains at 0.43. Perhaps we should try thinking outside the box. In what ways can social connections drive real world-behavior? Consider the following scenario. Suppose we analyze a student named Alex, whose node id in network `G` is `n`. Alex has 50 FriendHook friends. These are accessible through `G[n]`. We randomly sample two of the friends in `G[n]`. Their node ids are `a` and `b`. We then check if `a` and `b` are friends. They are! It seems that `a` is in `list(G[n])`. We then repeat this 100 times. In 95% percent of sampled instances, `a` is friend of `b`. Basically, there's a 95% likelihood that any pair of Alex's friends are also friends with each other. We'll refer to this probability as the **friend-sharing likelihood**.  Lets try incorporating this likelihood into our features. We'll start by computing the likehood for every node in `G`. \n",
    "\n",
    "**Listing 23. 27. Computing friend-sharing likelihoods**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "friend_sharing_likelihood = {}\n",
    "for node in nodes:\n",
    "    neighbors = list(G[node])\n",
    "    friendship_count = 0\n",
    "    total_possible = 0\n",
    "    for i, node1 in enumerate(neighbors[:-1]):\n",
    "        for node2 in neighbors[i + 1:]:\n",
    "            if node1 in G[node2]:\n",
    "                friendship_count += 1\n",
    "                \n",
    "            total_possible += 1\n",
    "    \n",
    "    prob = friendship_count / total_possible if total_possible else 0\n",
    "    friend_sharing_likelihood[node] = prob"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we'll generate a friend-sharing likelihood feature for each of our three profile ids. After adding the features, we'll re-valuate the trained model's performance.\n",
    "\n",
    "**Listing 23. 28. Adding friend-sharing likelihood features**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The f-measure is 0.49\n"
     ]
    }
   ],
   "source": [
    "np.random.seed(0)\n",
    "features = {f'{col}_Friend_Sharing_Likelihood': [] for col in cols}\n",
    "for node_ids in df_obs[cols].values:\n",
    "    for node, feature_name in zip(node_ids, features.keys()):\n",
    "        sharing_likelihood = friend_sharing_likelihood[node]\n",
    "        features[feature_name].append(sharing_likelihood)\n",
    "\n",
    "X = update_features(features)\n",
    "f_measure, clf = evaluate(X, y)\n",
    "print(f\"The f-measure is {f_measure:0.2f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Performance has increased from 0.43 to 0.49! It's still not great, but its progressively getting better. How does the friend-sharing likelihood compare to other features in the model? Lets find out!\n",
    "\n",
    "**Listing 23. 29. Ranking features by their importance score**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Shared_Cluster_id_fof: 0.18\n",
      "Friend_Friend_Sharing_Likelihood: 0.13\n",
      "FoF_PageRank: 0.11\n",
      "Profile_ID_PageRank: 0.11\n",
      "Profile_ID_Friend_Sharing_Likelihood: 0.10\n",
      "FoF_Friend_Sharing_Likelihood: 0.10\n",
      "FoF_Edge_Count: 0.08\n",
      "Friend_PageRank: 0.07\n",
      "Profile_ID_Edge_Count: 0.07\n",
      "Friend_Edge_Count: 0.06\n"
     ]
    }
   ],
   "source": [
    "feature_names = df_features.columns\n",
    "view_top_features(clf, feature_names)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "One of our new features ranks quite highly.Nonetheless, the model is incomplete. An f-measure of 0.49 is not acceptable. We need to incorporate features from the profiles stored within `df_profiles`.\n",
    "\n",
    "## 23. 3 Adding Profile Features to the Model\n",
    "\n",
    "\n",
    "Our aim is to incorporate the profile attributes of _Sex_, _Relationship_Status_, _Major_, _Dorm_ and _Year_ into our feature matrix. Based on our experience with the network data, there are three ways in which we can do this:\n",
    "1. Exact Value Extraction.\n",
    "    * We can store the exact value of the profile feature associated with each of the three profile-id columns in `df_obs`.\n",
    "   \n",
    "2. Equivalence Comparison\n",
    "    * Given a profile attribute, we can carry-out a pairwise comparison of the attribute across all three profile-id columns in `df_obs`. For each comparison we would return a boolean feature demarcating whether the attribute is equal within the two columns.\n",
    "   \n",
    "3. Size:\n",
    "    * Given a profile attribute, we can return the number of profiles that share that attribute.\n",
    "  \n",
    "    \n",
    "Let's apply Exact Value Extraction to _Sex_, _Relationship_Status_ and _Year_. \n",
    "\n",
    "**Listing 23. 30. Adding exact-value profile features**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The f-measure is 0.74\n"
     ]
    }
   ],
   "source": [
    "attributes = ['Sex', 'Relationship_Status', 'Year']\n",
    "for attribute in attributes:\n",
    "    features = {f'{col}_{attribute}_Value': [] for col in cols}\n",
    "    for node_ids in df_obs[cols].values:\n",
    "        for node, feature_name in zip(node_ids, features.keys()):\n",
    "            att_value = G.nodes[node][attribute]\n",
    "            features[feature_name].append(att_value)\n",
    "    \n",
    "    X = update_features(features)\n",
    "    \n",
    "f_measure, clf = evaluate(X, y)\n",
    "print(f\"The f-measure is {f_measure:0.2f}\") "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Wow! The f-measure dramatically increased from 0.49 to 0.74! The profile features have provided a very valuable signal, but we can still do better. We need to incorporate information from the _Major_ and _Dorm_ attributes. Equivalence Comparison is an excellent way to do this.\n",
    "\n",
    "**Listing 23. 31. Adding equivalence-comparison profile features**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The f-measure is 0.82\n"
     ]
    }
   ],
   "source": [
    "attributes = ['Major', 'Dorm']\n",
    "for attribute in attributes:\n",
    "    features = {f'Shared_{attribute}_{e}': []\n",
    "            for e in ['id_f', 'id_fof', 'f_fof']}\n",
    "    for node_ids in df_obs[cols].values:\n",
    "        att_id, att_f, att_fof = [G.nodes[n][attribute] \n",
    "                                  for n in node_ids]\n",
    "        features[f'Shared_{attribute}_id_f'].append(int(att_id == att_f))\n",
    "        features[f'Shared_{attribute}_id_fof'].append(int(att_id == att_fof))\n",
    "        features[f'Shared_{attribute}_f_fof'].append(int(att_f == att_fof))\n",
    "        \n",
    "    X = update_features(features)\n",
    "        \n",
    "f_measure, clf = evaluate(X, y)\n",
    "print(f\"The f-measure is {f_measure:0.2f}\") "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Incorporating the _Major_ and _Dorm_ attributes has improved model performance. Now lets consider adding _Major_ and _Dorm Size_ into the mix. We can count the number of students associated with each major / dorm, and include this count as one of our features. However, we need to be careful. As we previously discussed, our trained model can cheat by utilizing size as a substitute for a category id. \n",
    "\n",
    "**Listing 23. 32. Adding size-related profile features**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The f-measure is 0.85\n"
     ]
    }
   ],
   "source": [
    "from collections import Counter\n",
    "\n",
    "for attribute in ['Major', 'Dorm']:\n",
    "    counter = Counter(df_profile[attribute].values)\n",
    "    att_to_size = {k: v \n",
    "                      for k, v in counter.items()}\n",
    "    features = {f'{col}_{attribute}_Size': [] for col in cols}\n",
    "    for node_ids in df_obs[cols].values:\n",
    "        for node, feature_name in zip(node_ids, features.keys()):\n",
    "            size = att_to_size[G.nodes[node][attribute]]\n",
    "            features[feature_name].append(size)\n",
    "    \n",
    "    \n",
    "    X = update_features(features)\n",
    "    \n",
    "f_measure, clf = evaluate(X, y)\n",
    "print(f\"The f-measure is {f_measure:0.2f}\") "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Performance has increased from 0.82 to 0.85. The introduction of size has impacted our model. Lets dive deeper into that impact. We'll start by printing out the feature importance scores.\n",
    "\n",
    "**Listing 23. 33. Ranking features by their importance score**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "FoF_Dorm_Size: 0.25\n",
      "Shared_Cluster_id_fof: 0.16\n",
      "Shared_Dorm_id_fof: 0.05\n",
      "FoF_PageRank: 0.04\n",
      "Profile_ID_Major_Size: 0.04\n",
      "FoF_Major_Size: 0.04\n",
      "FoF_Edge_Count: 0.04\n",
      "Profile_ID_PageRank: 0.03\n",
      "Profile_ID_Friend_Sharing_Likelihood: 0.03\n",
      "Friend_Friend_Sharing_Likelihood: 0.03\n",
      "Friend_Edge_Count: 0.03\n",
      "Shared_Major_id_fof: 0.03\n",
      "FoF_Friend_Sharing_Likelihood: 0.02\n",
      "Friend_PageRank: 0.02\n",
      "Profile_ID_Dorm_Size: 0.02\n",
      "Profile_ID_Edge_Count: 0.02\n",
      "Profile_ID_Sex_Value: 0.02\n",
      "Friend_Major_Size: 0.02\n",
      "Profile_ID_Relationship_Status_Value: 0.02\n",
      "FoF_Sex_Value: 0.01\n",
      "Friend_Dorm_Size: 0.01\n",
      "Profile_ID_Year_Value: 0.01\n",
      "Friend_Sex_Value: 0.01\n",
      "Shared_Major_id_f: 0.01\n",
      "Friend_Relationship_Status_Value: 0.01\n",
      "Friend_Year_Value: 0.01\n"
     ]
    }
   ],
   "source": [
    "feature_names = df_features.columns.values\n",
    "view_top_features(clf, feature_names)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The feature importance scores are dominated by two features; _FoF_Dorm_Size_ and _Shared_Cluster_id_fof_. The presence of _FoF_Dorm_Size_ is a bit concerning. As we've discussed, a single dorm dominates over 50% of the network data. Is our model simply memorizing that dorm based on its size? We can find out by actually visualizing a trained decision tree. \n",
    "\n",
    "**Listing 23. 34. Displaying the top branches of the tree**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "|--- FoF_Dorm_Size <= 278.50\n",
      "|   |--- Shared_Cluster_id_fof <= 0.50\n",
      "|   |   |--- class: 0\n",
      "|   |--- Shared_Cluster_id_fof >  0.50\n",
      "|   |   |--- class: 0\n",
      "|--- FoF_Dorm_Size >  278.50\n",
      "|   |--- Shared_Cluster_id_fof <= 0.50\n",
      "|   |   |--- class: 0\n",
      "|   |--- Shared_Cluster_id_fof >  0.50\n",
      "|   |   |--- class: 1\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from sklearn import tree\n",
    "\n",
    "clf_depth2 = DecisionTreeClassifier(max_depth=2)\n",
    "clf_depth2.fit(X, y)\n",
    "text_tree = tree.export_text(clf_depth2, feature_names=list(feature_names))\n",
    "print(text_tree)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "According to the the tree, the most important signal is whether _FoF_Dorm_Size_ is less than 279. This begs the question, how many dorms contain at-least 279 students? \n",
    "\n",
    "**Listing 23. 35. Checking dorms with at-least 279 students**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Dorm 12 holds 2739 students.\n",
      "Dorm 1 holds 413 students.\n"
     ]
    }
   ],
   "source": [
    "counter = Counter(df_profile.Dorm.values)\n",
    "for dorm, count in counter.items():\n",
    "    if count < 279:\n",
    "        continue\n",
    "        \n",
    "    print(f\"Dorm {dorm} holds {count} students.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Just two of the 15 dorms contain more than 279 FriendHook-registered students. Essentially, our model relies on the two most-populous dorms to make its decisions. This might not generalize to other college campuses. For instance, consider a campus whose dormitories are smaller, and hold 200 students at the most. The model will completely fail to predict user-behavior in this instance. \n",
    "\n",
    "Perhaps we could try deleting the size-related features while also adjusting our choice of classifier. There is a slight chance that we'll achieve comparable performance without relying on dorm size. This is unlikely but is still worth trying. \n",
    "\n",
    "**Listing 23. 36. Deleting all size-related features**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_with_sizes = X.copy()\n",
    "X = delete_features(df_features, regex=r'_Size')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 23. 4 Optimizing Performance Across a Steady Set of Features\n",
    "\n",
    "Will switching the model-type from a Decision tree to a Forest improve performance outcome? Lets find out.\n",
    "\n",
    "**Listing 23. 37. Training and evaluating a Random Forest classifier**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The f-measure is 0.75\n"
     ]
    }
   ],
   "source": [
    "np.random.seed(0)\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "f_measure, clf = evaluate(X, y, model_type=RandomForestClassifier)\n",
    "print(f\"The f-measure is {f_measure:0.2f}\") "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "Switching the type of model has not helped. Perhaps instead we can boost performance by optimizing on the hyperparameters? Within this book, we've focused on single Decision tree hyperparameter; max depth. Will limiting the depth improve our predictions? Lets quickly check using a simple grid search. \n",
    "\n",
    "**Listing 23. 38. Optimizing max depth using grid search**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "A maximized f-measure of 0.84 is achieved when max_depth equals 5\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import GridSearchCV\n",
    "np.random.seed(0)\n",
    "\n",
    "hyperparams = {'max_depth': list(range(1, 100)) + [None]}\n",
    "clf_grid = GridSearchCV(DecisionTreeClassifier(), hyperparams, \n",
    "                        scoring='f1_macro', cv=2)\n",
    "clf_grid.fit(X, y)\n",
    "best_f = clf_grid.best_score_\n",
    "best_depth = clf_grid.best_params_['max_depth']\n",
    "print(f\"A maximized f-measure of {best_f:.2f} is achieved when \"\n",
    "      f\"max_depth equals {best_depth}\") "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Setting `max_depth` to 5 improves the f-measure from from 0.82 to 0.84. This level of performance is comperable with our Dorm-size dependent model. Of course, we cannot make a fair comparison without first running a grid search on the size-inclusive `X_with_size` feature-matrix. Will optimizing on `X_with_size` yield an even better classifier? Lets find out.\n",
    "\n",
    "**Listing 23. 39. Applying grid search to size-dependent training data**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "A maximized f-measure of 0.85 is achieved when max_depth equals 6\n"
     ]
    }
   ],
   "source": [
    "np.random.seed(0)\n",
    "clf_grid.fit(X_with_sizes, y)\n",
    "best_f = clf_grid.best_score_\n",
    "best_depth = clf_grid.best_params_['max_depth']\n",
    "print(f\"A maximized f-measure of {best_f:.2f} is achieved when \"\n",
    "      f\"max_depth equals {best_depth}\") "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The grid search did not improve performance on `X_with_size`. Thus, we can conclude that with the right choice of max-depth, both the size-dependent and independent models perform with approximately equal quality. Consequently, we can train a generalizable, size-independent model without sacrificing perfomance. \n",
    "\n",
    "**Listing 23. 40. Training a Decision tree with `max_depth` set to 5**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DecisionTreeClassifier(max_depth=5)"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "clf = DecisionTreeClassifier(max_depth=5)\n",
    "clf.fit(X, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 23. 6 Interpreting the Trained Model\n",
    "\n",
    "Lets print our model's feature importance scores.\n",
    "\n",
    "**Listing 23. 41. Ranking features by their importance score**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Shared_Dorm_id_fof: 0.42\n",
      "Shared_Cluster_id_fof: 0.29\n",
      "Shared_Major_id_fof: 0.10\n",
      "Shared_Dorm_f_fof: 0.06\n",
      "Profile_ID_Relationship_Status_Value: 0.04\n",
      "Profile_ID_Sex_Value: 0.04\n",
      "Friend_Edge_Count: 0.02\n",
      "Friend_PageRank: 0.01\n",
      "Shared_Dorm_id_f: 0.01\n"
     ]
    }
   ],
   "source": [
    "feature_names = df_features.columns\n",
    "view_top_features(clf, feature_names)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Only nine important features remain. Only three features have an importance score that's at or above 0.10. These are `Shared_Dorm_id_fof`, `Shared_Cluster_id_fof`, and `Shared_Major_id_fof`. Thus, the model is primarily driven by the following three questions:\n",
    "\n",
    "1. Do the the user and the friend-of-friend share a dormitory? Yes or no?\n",
    "2. Do the the user and the friend-of-friend share a social group? Yes or no?\n",
    "3. Do the the user and the friend-of-friend share a major? Yes or no?\n",
    "\n",
    "Intuitively, if the answers to all three questions are _Yes_, then the user and the friend-of-a-friend are more likely to connect on FriendHook. Lets test this intutition, by displaying the tree. \n",
    "\n",
    "**Listing 23. 42. Displaying the top branches of the tree**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "|--- Shared_Dorm_id_fof <= 0.50\n",
      "|   |--- Shared_Cluster_id_fof <= 0.50\n",
      "|   |   |--- Shared_Major_id_fof <= 0.50\n",
      "|   |   |   |--- class: 0\n",
      "|   |   |--- Shared_Major_id_fof >  0.50\n",
      "|   |   |   |--- class: 0\n",
      "|   |--- Shared_Cluster_id_fof >  0.50\n",
      "|   |   |--- Shared_Major_id_fof <= 0.50\n",
      "|   |   |   |--- class: 0\n",
      "|   |   |--- Shared_Major_id_fof >  0.50\n",
      "|   |   |   |--- class: 1\n",
      "|--- Shared_Dorm_id_fof >  0.50\n",
      "|   |--- Shared_Cluster_id_fof <= 0.50\n",
      "|   |   |--- Profile_ID_Sex_Value <= 0.50\n",
      "|   |   |   |--- class: 0\n",
      "|   |   |--- Profile_ID_Sex_Value >  0.50\n",
      "|   |   |   |--- class: 2\n",
      "|   |--- Shared_Cluster_id_fof >  0.50\n",
      "|   |   |--- Shared_Dorm_f_fof <= 0.50\n",
      "|   |   |   |--- class: 1\n",
      "|   |   |--- Shared_Dorm_f_fof >  0.50\n",
      "|   |   |   |--- class: 1\n",
      "\n"
     ]
    }
   ],
   "source": [
    "clf_depth3 = DecisionTreeClassifier(max_depth=3)\n",
    "clf_depth3.fit(X, y)\n",
    "text_tree = tree.export_text(clf_depth3, \n",
    "                             feature_names=list(feature_names))\n",
    "print(text_tree)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "The model's logic is very straightforward. Users who share social groups and living spaces or study-schedules are more likely to connect. There's nothing suprising about that. What is suprising is how the _Sex_ feature drives _Class 2_ label prediction. According to our tree, rejection is more likeley when:\n",
    "\n",
    "1. The users share a dorm but are not in the same social group.\n",
    "2. The request sender is of a certain specific sex.\n",
    "\n",
    "Of course, we know that _Class 2_ labels are fairly sparse within our data. Perhaps the model's predictions are caused by random noise arising from the sparse sampling? Lets quickly check how well we predict rejection. \n",
    "\n",
    "**Listing 23. 43. Evaluating a rejection classifier**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The f-measure is 0.97\n"
     ]
    }
   ],
   "source": [
    "y_reject = y *(y == 2)\n",
    "f_measure, clf_reject = evaluate(X, y_reject, max_depth=5)\n",
    "print(f\"The f-measure is {f_measure:0.2f}\") "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Wow, the f-measure is actually very high! We can predict rejection very well, despite the sparsity of data. What features drive rejection? Lets check by printing the new feature importance scores.\n",
    "\n",
    "**Listing 23. 44. Ranking features by their importance score**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Profile_ID_Sex_Value: 0.40\n",
      "Profile_ID_Relationship_Status_Value: 0.24\n",
      "Shared_Major_id_fof: 0.21\n",
      "Shared_Cluster_id_fof: 0.10\n",
      "Shared_Dorm_id_fof: 0.05\n"
     ]
    }
   ],
   "source": [
    "view_top_features(clf_reject, feature_names)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Interesting! Rejection is primarily driven by the user's _Sex_ and _Relationship_Status_ attributes. Lets visualize the trained tree to learn more.\n",
    "\n",
    "**Listing 23. 45. Displaying the rejection-predicting tree**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "|--- Shared_Cluster_id_fof <= 0.50\n",
      "|   |--- Shared_Major_id_fof <= 0.50\n",
      "|   |   |--- Shared_Dorm_id_fof <= 0.50\n",
      "|   |   |   |--- class: 0\n",
      "|   |   |--- Shared_Dorm_id_fof >  0.50\n",
      "|   |   |   |--- Profile_ID_Relationship_Status_Value <= 2.50\n",
      "|   |   |   |   |--- class: 0\n",
      "|   |   |   |--- Profile_ID_Relationship_Status_Value >  2.50\n",
      "|   |   |   |   |--- Profile_ID_Sex_Value <= 0.50\n",
      "|   |   |   |   |   |--- class: 0\n",
      "|   |   |   |   |--- Profile_ID_Sex_Value >  0.50\n",
      "|   |   |   |   |   |--- class: 2\n",
      "|   |--- Shared_Major_id_fof >  0.50\n",
      "|   |   |--- Profile_ID_Sex_Value <= 0.50\n",
      "|   |   |   |--- class: 0\n",
      "|   |   |--- Profile_ID_Sex_Value >  0.50\n",
      "|   |   |   |--- Profile_ID_Relationship_Status_Value <= 2.50\n",
      "|   |   |   |   |--- class: 0\n",
      "|   |   |   |--- Profile_ID_Relationship_Status_Value >  2.50\n",
      "|   |   |   |   |--- class: 2\n",
      "|--- Shared_Cluster_id_fof >  0.50\n",
      "|   |--- class: 0\n",
      "\n"
     ]
    }
   ],
   "source": [
    "text_tree = tree.export_text(clf_reject, \n",
    "                             feature_names=list(feature_names))\n",
    "print(text_tree)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "According to the tree, individuals with _Sex Category 1_ and _Relationship Status Category 3_ are sending friend-requests to people outside their social group. These friend requests are likely to get rejected. Of course, we don't know the identify of the categories that lead to rejection. However, as scientists, we still speculate. Given what we know about human nature, it wouldn't be suprising this behavior is driven by single men. Perhaps they are trying to connect with women outside their social circle, in order to get a date? If, so then the request will probably be rejected. Again, all this is speculation. However, this hypothesis is worth discussing with the product managers at FriendHook. If our hypothesis is correct, then certain changes should be introduced to the product. More steps could be taken to limit unwanted dating requests. Alternatively, new product changes could be added that make easier for single people to connect."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
